假設我們現在有user和org兩張表:
1、user用戶表 字段包含:id、name、orgId 其中orgId標示該用戶所屬的組織
2、org組織表 字段包含:id、name
兩表之間的關系很簡單,一個組織下會擁有多個用戶,一個用戶屬于某個組織。
在解析之前先普及一下數據庫空值(null)的概念:
有很多時候我們都能碰到某表中某字段值為空的情況,空值不等同于字符串中的空格、空串
也不等同于數字類型的0,所以,一般我們用IS NULL 關鍵字來檢索有空值字段的記錄。而不是用!=、<>這些判斷符。
接下來,我們給示例庫表中做上一些測試數據,如下圖:
有了這些數據,咱們就可以進入正題啦:
一、左連接、右連接
A Left join(左連接)優先解出左表中所有的記錄,包含右表中沒有匹配到得記錄。
A Right join(右連接)優先解出右表中所有的記錄,包含左表中沒有匹配到得記錄。
左右連接是相互對應的,所以在這里一并解釋。
羅嗦一句如何區分左表和右表:
在JOIN的左邊出現的表叫左表,在JOIN的右邊出現的表叫右表
具體體現在SQL語句上即:(以左連接為例)
左連接語句:SELECT user.name,org.name FROM user
LEFT JOIN org ON user.orgId = org.id
右鏈接語句:SELECT user.name,org.name FROM user
RIGHT JOIN org ON user.orgId = org.id
顯而易見,該SQL中,user為左表、org為右表
下面我們來看看這兩個語句分別執行后的效果:
為了更好的看出左右連接的效果,我們再來看看內連接查詢出來的效果
內連接:SELECT user.name,org.name FROM user JOIN org ON user.orgId = org.id
內連接語句執行后的效果:

很明顯:
內連接與左連接相比,檢索結果集中漏掉了user表的user3數據
內連接與右連接相比,檢索結果集中漏掉了org表的org4數據