外連接分為左外連接,右外連接以及全外連接。前面我們學(xué)習(xí)的
內(nèi)連接獲得是滿足條件的記錄,連接查詢(xún)的表中不滿足條件的記錄被去掉。而外連接的特點(diǎn)是:查詢(xún)出的結(jié)果存在不滿足條件的可能。
1.左外連接
左外連接是將左表的所有記錄查詢(xún)出來(lái),左表中不滿足條件的記錄對(duì)應(yīng)的右表中的列的值顯示為NULL。左外連接的關(guān)鍵詞是:LEFT OUTER JOIN,對(duì)應(yīng)的sql語(yǔ)句如下:
- SELECT * FROM 表1 別名1 LEFT OUTER JOIN 表2 別名2 ON 別名1.列名=別名2.列名
其中表1就是左表,又稱(chēng)為主表,表2是右表。
使用左外連接查詢(xún)出每個(gè)員工的信息以及所在部門(mén)信息,對(duì)應(yīng)的查詢(xún)語(yǔ)句是:select * from emp e left outer join dept d on e.deptno=d.deptno,查詢(xún)結(jié)果如圖1-1所示:
圖1-1 左外連接
圖1-1中,由查詢(xún)結(jié)果可知當(dāng)左表的記錄不滿足條件時(shí),右表的列的值為null。圖1-1中張三的部門(mén)號(hào)為50,而dept表中沒(méi)有這個(gè)部門(mén),那么部門(mén)信息就用null代替。這就是左外連接的特點(diǎn)。
2.右外連接
右外連接是將右表中的所有記錄查詢(xún)出來(lái),右表中不滿足條件的記錄對(duì)應(yīng)的左表中的列的值顯示為NULL。右連接的關(guān)鍵詞是:RIGHT OUTER JOIN,對(duì)應(yīng)的sql語(yǔ)句如下:
- SELECT * FROM 表1 別名1 RIGHT OUTER JOIN 表2 別名2 ON 別名1.列名=別名2.列名
其中表1是左表,表2是右表,又稱(chēng)為主表。
使用右外連接查詢(xún)出每個(gè)部門(mén)的信息,以及部門(mén)的員工信息,對(duì)應(yīng)的查詢(xún)語(yǔ)句是:select * from emp e right outer join dept d on e.deptno=d.deptno,查詢(xún)結(jié)果如圖1-2所示:
圖1-2 右外連接
圖1-1中,查詢(xún)的結(jié)果中財(cái)務(wù)部沒(méi)有員工,那么必然不會(huì)有員工的部門(mén)號(hào)與財(cái)務(wù)部的部門(mén)號(hào)相同,那么該記錄就不滿足查詢(xún)條件,因此左表的所有列的值為null,這就是右外連接的特點(diǎn)。
3.全外連接
全外連接對(duì)左表和右表都不做限制,所有的記錄都顯示,兩表中不滿足條件的地方用null填充。全外連接的關(guān)鍵詞是:FULL OUTRE JOIN,對(duì)應(yīng)的sql語(yǔ)句如下:
- SELECT * FROM 表1 別名1 FULL OUTER JOIN 表2 別名2 ON 別名1.列名=別名2.列名
MySQL數(shù)據(jù)庫(kù)不支持全外連接,但是從分析來(lái)看,全外連接就是將左外連接以及右外連接的結(jié)果合并起來(lái)。
使用全外連接查詢(xún)emp表和dept表的信息,如圖1-3所示:
圖1-3 全外連接
圖1-3中,使用如下sql語(yǔ)句模擬全外連接的效果:
SELECT
*
FROM
emp e LEFT OUTER JOIN dept d
ON
e.deptno=d.deptno
UNION
SELECT
*
FROM
emp e RIGHT OUTER JOIN dept d
ON
e.deptno=d.deptno
圖1-3的查詢(xún)結(jié)果中,兩個(gè)表中不滿足條件的對(duì)應(yīng)位置用null代替。
使用左外連接查詢(xún),左表是e1,因此e1表中的所有員工姓名都被查詢(xún)出來(lái),e2表中不滿足條件的位置用null代替。
本文版權(quán)歸傳智播客人工智能+Python學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客人工智能+Python學(xué)院