前言:
項目中很多的sql都會涉及到多表的關聯查詢,如果我們對錶關聯不熟悉,就很難寫出準確的sql語句。首先看一張經典的表關聯圖
通過這張圖,我們能初步的對錶關聯有個瞭解。下面本文會通過實際案例來介紹各個表關聯方式的使用。
數據準備:
部門表 用戶表
一、內連接
內連接是比較常用的連接方式,它取的是兩個表的交集;關鍵字:INNER JOIN 可簡寫成 JOIN
SELECT * FROM tb_user A JOIN tb_dept B ON A.dept_id = B.id;
二、左連接
左連接是我們最常用的一種連接;關鍵字:LEFT OUTER JOIN 可簡寫成 LEFT JOIN
它是以A爲主表,B爲副表關聯查詢,查詢結果以A表數據爲基準;
SELECT * FROM tb_user A LEFT JOIN tb_dept B ON A.dept_id = B.id;
* 如果想要篩選 A表中的數據但又不存在B表的關聯數據,可以這樣寫(常用於查詢髒數據):
SELECT * FROM tb_user A LEFT JOIN tb_dept B ON A.dept_id = B.id where B.id IS NULL;
三、右連接
右連接我們不太常用,因爲它可以被左連接取代,只需要把左連接的兩個關聯表替換一下位置即可實現右連接的效果;
它是以B爲主表,A爲副表關聯查詢,查詢結果以B表數據爲基準;關鍵字:RIGHT OUTER JOIN 可簡寫成 RIGHT JOIN
SELECT * FROM tb_user A RIGHT JOIN tb_dept B ON A.dept_id = B.id;
四、其他
還有一種連接方式也很常用 【逗號分隔表】,關聯條件需寫在WHERE中。
有關聯條件時,其查詢結果與內連接相同 ;無關聯條件時,其結果集爲兩表的笛卡爾積。
SELECT * FROM tb_user A, tb_dept B WHERE A.dept_id = B.id;
拓展
表關聯中的 WHERE 和 ON的區別:
ON:針對關聯表進行條件篩選,不會影響結果集的數量和主表數據。
WHERE:針對結果集進行條件篩選,會影響結果集的數量。
看例子很好理解:
1)條件放在ON條件中
2)條件放在WHERE 條件中
看完本文是不是對錶關聯更加理解了呢,如果本文有不對的地方,歡迎指正。