首先分別創(chuàng)建 a 表 和 b 表
b 表
內(nèi)連接
內(nèi)連接 語法: a inner join b 封豪;
一般 inner 可以省略不寫瓢娜,也就是:
select * from a join b ;
像這樣不加查詢條件會形成 笛卡爾積 。
笛卡爾積的意思是:是指包含兩個集合中任意取出兩個元素構(gòu)成的組合的集合黎比。// 兩表分別交叉查詢了一遍恋脚;
即(a表3行 x b表3行 = 結(jié)果集 9 行數(shù)據(jù))
也可以加上條件查詢條件 on 或者 using ,兩者的區(qū)別在于 都是查詢出符合條件的結(jié)果集 焰手,但是using會優(yōu)化掉相同的字段。
select * from a join b on a.id = b.id ;
從上圖可以看出怀喉,加上條件之后书妻,只查詢出了符合條件的結(jié)果集
select * from a join b on using(id) ;
從上圖可以看出,同樣是查詢出了符合條件的結(jié)果集躬拢,但是相同的字段 id 被using優(yōu)化了躲履。
外連接
外連接又分為:左外連接(左連接)、右外連接(右連接)聊闯、全外連接
注:外連接必須要添加 on 或者 using 作為查詢條件工猜,否則會報語法錯誤;
左連接 語法:a left outer join b 菱蔬;
一般outer可以省略不寫篷帅。比如:
select * from a left join b on a.id = b.id ;
看上圖顯示:左連接既 左邊 a 表作為基表(主表)顯示所有行, b 表作為外表 條件匹配上的就顯示拴泌,沒匹配上的就用 Null 填充魏身;
右連接 語法:a right outer join b ;
一般outer可以省略不寫蚪腐。比如:
select * from a right join b on a.id = b.id ;
看上圖顯示:右連接即 右邊 b 表作為基表(主表)顯示所有行箭昵, a 表作為外表 條件匹配上的就顯示,沒匹配上的就用 Null 填充回季; 和左連接相反家制。
全外連接
經(jīng)查找發(fā)現(xiàn) MySQL 是不支持所謂 a full join b 語作為 全外連接查詢的正林,想要實現(xiàn)全外連接查詢可以通過 union 實現(xiàn),union 操作符用于合并兩個或多個 SELECT 語句的結(jié)果集颤殴,語句如下:
select * from a left join b on a.id = b.id union select * from a right join b on a.id = b.id ;
注:當 union 和 all 一起使用時(即 union all )觅廓,重復(fù)的行不會去除。
交叉連接
交錯連接 語法:a cross join b 诅病;交錯連接可以加查詢條件哪亿,也可以不加查詢條件,如果不加查詢條件會形成 笛卡爾積贤笆,類似內(nèi)連接效果蝇棉,同樣可以使用 using 語句優(yōu)化字段。
select * from a cross join b ;
加上條件查詢:
select * from a cross join b on a.id = b.id ;
總結(jié):
1芥永、內(nèi)連接和交叉連接類似篡殷,只是語句語法有所不同,但最后查詢出來的結(jié)果集的效果都是一樣的埋涧,添加條件查詢就只查詢匹配條件的行板辽,不添加條件查詢則形成 笛卡爾積 而降低效率。
2棘催、左外連接以左邊表為基礎(chǔ)表 顯示所有行 劲弦,右邊表條件匹配的行顯示,不匹配的則有 Null 代替醇坝。
3邑跪、右外連接以右邊表為基礎(chǔ)表 顯示所有行 ,左邊表條件匹配的行顯示呼猪,不匹配的則有 Null 代替画畅。