Mysql的多表關聯查詢

前言:

項目中很多的sql都會涉及到多表的關聯查詢,如果我們對錶關聯不熟悉,就很難寫出準確的sql語句。首先看一張經典的表關聯圖

 通過這張圖,我們能初步的對錶關聯有個瞭解。下面本文會通過實際案例來介紹各個表關聯方式的使用。

數據準備:

http://note.youdao.com/noteshare?id=a71546c2513f34d2a9fe8dc8d37848c0&sub=988AD7503AE44038948230D3F1307D08

部門表  用戶表  

一、內連接

內連接是比較常用的連接方式,它取的是兩個表的交集;關鍵字: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 條件中 

 

看完本文是不是對錶關聯更加理解了呢,如果本文有不對的地方,歡迎指正。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章