1. 程式人生 > 資料庫 >Mysql中的全外連線

Mysql中的全外連線

首先,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;請不要弄混。

 

 

轉載: