首先,mysql本身是沒有提供全外連接的,
MySql中多表查詢只提供了內連接,左外連接與右外連接:
table_reference {[INNER] JOIN | {LEFT|RIGHT} [OUTER] JOIN} table_reference ON conditional_expr
1】INNER JOIN ON內連接(只寫join時默認為內連接)
SELECT * FROM emp e JOIN dept d ON e.deptno
=d.deptno
;
2】外連接:在左外連接和右外連接時都會以一張表為基表,該表的內容會全部顯示,然后加上兩張表匹配的內容。如果基表的數據在另一張表沒有記錄。那么在相關聯的結果集行中列顯示為空值(NULL)。
2.1、左外連接:顯示左表的全部記錄
SELECT * FROM emp e LEFT JOIN dept d ON e.deptno
=d.deptno
;
2.2、右外連接:顯示右表的全部記錄
SELECT * FROM emp e RIGHT JOIN dept d ON e.deptno
=d.deptno
;
2.3、全外連接:左表和右表都不做限制,所有的記錄都顯示,兩表不足的地方用null 填充;
也就是:
左外連接=左表全部記錄+相關聯結果
右外連接=右表全部記錄+相關聯結果
全外連接=左表全部記錄+右表全部記錄+相關聯結果=左外連接+右外連接-相關聯結果(即去重復)
那么在MYSQL中誰可以做到呢?
UNION
UNION 操作符用於合並兩個或多個 SELECT 語句的結果集。
注釋:默認地,UNION 操作符選取不同的值。如果允許重復的值,請使用 UNION ALL。
故實現全外連接可以使用:
SELECT * FROM emp e LEFT JOIN dept d ON e.deptno
=d.deptno
UNION
SELECT * FROM emp e RIGHT JOIN dept d ON e.deptno
=d.deptno
;
注釋:以上連接全為等值連接;Oracle中全外連接可以使用full join;請不要弄混。