1.建立表
(1)外鍵:FOREIGN KEY(ordersid) references orders(id)
在建表過程中
create table team(
id int primary key auto_increment,
name varchar(40)
);
create table star(
id int ,
name varchar(40),
team_id int,
foreign key (team_id) references team(id)
insert into team values(null,'Toronto Raptors'),(null,'Milwaukee Bucks'),(null,'Boston Celtics'),(null,'Golden State Warriors'),(null,'Oklahoma City Thunder'),(null,'Dallas Mavericks');
insert into star values(2,'科懷-倫納德',1),(7,'洛瑞',1),(34,'阿德托昆博',2),(22,'米德爾頓',2),(11,'歐文',3),(20,'海沃德',3),(35,'杜蘭特',4),(30,'庫裡',4),(0,'威斯布魯克',5),(13,'保羅-喬治',5),(77,'盧克-東契奇',6),(41,'諾維斯基',6);
(2)在表已經存在,通過修改表的語句增加外鍵
ALTER TABLE 表名 ADD constraint FK_ID#外鍵名 foreign key(外鍵字段名) references 外表表名(主字段名)
(3)删除外鍵
alter table 表名 drop foreign key 外鍵名;
(4)操作關聯表
多對多關系:建立一張第三方關系表,儲存兩張表的主鍵作為外鍵,存儲兩張表主鍵主鍵之間的對應關系,來儲存兩張表之間的關系
一對一:在從表建立外鍵
2.連接配接查詢
(1)多表設計多表查詢
select * from team,star; #兩張表相乘結果
select * from team,star where team.id = star.team_id; #過濾
~内連接配接:自然連接配接
SELECT 查詢字段 FROM 表1 [INNER] JOIN 表2 ON 表1.關系字段 = 表2.關系字段
select * from team inner join star on team.id = star.team_id;
~左外連接配接查詢:在内連結的基礎上增加上左邊表有而右邊表沒有的記錄
select * from team left join star on team.id = star.team_id;
~右外連接配接查詢,在内連結的基礎上增加上右邊表有而左邊表沒有的記錄
select * from team right join star on team.id = star.team_id;
~全連接配接查詢:
select * from team full join star on team.id = star.team_id;#mysql不支援
但是支援union
select from team left join star on team.id = star.team_id
union
select from team right join star on team.id = star.team_id;
~查詢3号球隊的名稱和其中的球員的姓名
select * from team inner join star on team.id = star.team_id where team_id = 3;
select team.name 隊名,star.name 球員 from team inner join star on team.id = star.team_id where team_id = 3;
3.子查詢
(1)帶IN關鍵字的子查詢,内層查詢語句僅僅傳回一個資料列,這個資料列中的值将供外層查詢語句語句進行比較操作,即嵌套查詢
~查詢号碼大于20的球員所屬的部門
select name from team where id in (select team_id from star where id>20);
~查詢不大于20的球員所屬的部門
select name from team where id not in (select team_id from star where id = 20);
(2)帶EXISTS關鍵字的子查詢:子查詢不傳回任何資料,隻傳回Ture or False ,為Ture時才執行外查詢
select * from team where exists (select team_id from star where id > 20); #兩張表的字段名要一樣
(3)帶any關鍵字的子查詢:ANY關鍵字表示滿足其中任意一個條件即可
select * from team where id > any (select team_id from star where id = 20);
(4) 帶ALL關鍵字的子查詢:需要同時滿足内查詢所有條件
select * from team where id > all (select team_id from star where id > 20);
select * from team where id > all (select team_id from star where id < 10);