連接查詢[連表查詢、多表查詢]當(dāng)查詢結(jié)果的列來源于多張表時(shí),需要將多張表連接成一個(gè)大的數(shù)據(jù)集,再選擇合適的列返回 mysql支持三種類型的連接查詢,分別為: 內(nèi)連接查詢(inner join)查詢的結(jié)果為兩個(gè)表匹配到的數(shù)據(jù) 使用內(nèi)連接,必須保證兩個(gè)表都會對應(yīng)id的數(shù)據(jù)才會被查詢出來。 ? ? ? ? ? ? ? ?? ? 格式:select 字段1,字段2... from 主表A inner join 從表B on 主表A.主鍵=從表B.外鍵 例如:查詢學(xué)生的信息[ 成績、名字、班級 ]? ? ? ??我們給學(xué)生表添加一個(gè)學(xué)生信息,然后使用該學(xué)生的主鍵id來連表查詢成績、名字和班級。 insert into student (name,sex,age,class,description) values ('劉德華',1,17,406,'');
select achievement,name,class
from student as a
inner join achievement as b
on a.id=b.sid
where id=101;
# 上面語句因位該學(xué)生只在學(xué)生表student中有數(shù)據(jù),而成績表中沒有數(shù)據(jù),所以使用內(nèi)連接,連表查詢的結(jié)果是
Empty set (0.00 sec)
? 同樣,如果從表有數(shù)據(jù),而主表沒有數(shù)據(jù),則使用內(nèi)連接查詢一樣無法查詢到結(jié)果。 #例如,添加一個(gè)成績記錄,是不存在學(xué)生 insert into achievement (sid,cid,achievement) values (102,10,85); select achievement,name,class from student as a inner join achievement as b on a.id=b.sid where id=102; 右連接查詢(right join)只要從表有數(shù)據(jù),不管主表是否有數(shù)據(jù),都會查詢到結(jié)果。[以從表的結(jié)果為主 例如:a.id=b.sid,只要b表的sid存在就可以 ;? a.id不存在不要緊??左表中不存在的數(shù)據(jù)使用null填充] 查詢的結(jié)果為兩個(gè)表匹配到的數(shù)據(jù),右表特有的數(shù)據(jù),對于左表中不存在的數(shù)據(jù)使用null填充 ? ? ? ? ? ? ? ? 格式:select 字段1,字段2... from 主表 right join 從表 on 主表.主鍵=從表.外鍵 select achievement,name,class from student as a right join achievement as b on a.id=b.sid where b.sid=102; ? ? 來源:http://www./content-2-211651.html |
|
|