天天看點

MySQL外鍵

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);

繼續閱讀