資料庫-連線查詢
1、連線查詢的幾個概念
連線方式
- 內連線-INNER JOIN
顯示左表及右表符合連線條件的記錄
- 左外連線-LEFT JOIN
顯示左表的全部記錄及右表符合連線條件的記錄,右表不符合條件的顯示NULL
- 右外連線-RIGHT JOIN
顯示右表的全部記錄及左表符合連線條件的記錄,左表不符合條件的顯示NULL
2、等值連線
內連線
- INNER JOIN
內連線,也稱為等值連線
顯示左表及右表符合連線條件(欄位匹配關係)的記錄
將兩張表的列組合在一起,產出新的結果集,結果集是兩個表的公共部分
on的方式,using:select * from boys inner on girls using(matchNum);
- 隱式內連線、JOIN、CROSS JOIN
不使用on語法時,join、inner join、逗號、cross join結果相同,都是取2個表的笛卡爾積
3、左外連線
- LEFT JOIN
- 讀取左表全部資料,即便右表沒有對應資料
- 如果右表沒有匹配記錄,右側結果集欄位將為null
- A LEFT JOIN B:以A表為基礎連線B查詢結果
查詢出所有A記錄
SELECT * FROM A LEFT JOIN B ON A.KEY=B.KEY;
查詢出不在B表中的A記錄
SELECT * FROM A LEFT JOIN B ON A.KEY=B.KEY WHERE B.KEY IS NULL;
4、右外連線
- RIGHT JOIN
- 讀取右表全部資料,即便左表沒有對應資料
- A RIGHT JOIN B:以B表為基礎連線A查詢結果,與LEFT JOIN相反
查詢出所有B記錄:SELECT * FROM A RIGHT JOIN B ON A.KEY=B.KEY;
查詢出不在A表中的B記錄:SELECT * FROM A RIGHT JOIN B ON A.KEY=B.KEY WHERE A.KEY IS NULL;
5、完全連線
全連線
- 完全連線返回左表和右表中的所有行
- 用UNION ALL的方式達到FULL JOIN的效果
- 查詢A表B表所有資料
SELECT * FROM A LEFT JOIN B ON A.KEY=B.KEY WHERE B.KEY IS NULL;
UNION ALL
SELECT * FROM A RIGHT JOIN B ON A.KEY=B.KEY WHERE A.KEY IS NULL;
- UNION是去重查詢結果集,UNION ALL是不去重結果集
SELECT 1 UNION SELECT 1;
SELECT 1 UNION ALL SELECT 1;