測試必備的Mysql常用sql語句系列
https://www.cnblogs.com/poloyy/category/1683347.html
前言
- 外連接分為兩種:left join、right join
- 外連接顯示的內容要比內連接多,是對內連接的補充
- left join的主表是左表,從表是右表
- right join的主表是右表,從表是左表
- 外連接會返回主表的所有數據,無論在從表是否有與之匹配的數據,若從表沒有匹配的數據則默認為空值(NULL)
- 外連接只返回從表匹配上的數據
- 重點:在使用外連接時,要分清查詢的結果,是需要顯示左表的全部記錄,還是右表的全部記錄
left join、right join 的語法格式
SELECT <字段名> FROM <表1> LEFT OUTER JOIN <表2> <ON子句> SELECT <字段名> FROM <表1> RIGHT OUTER JOIN <表2> <ON子句>
語法格式說明
- outer可以省略,只寫 left join 、 right join
- on是設置左連接的連接條件,不能省略
先看看dept、emp表有什么數據
dept表
emp表
left join 的栗子
SQL分析
- 主表:emp
- 從表:dept
- 根據 emp 表的員工 dept_id 和 dept 表的部門 id 進行匹配
- 因為 emp 是主表,所以最后兩條記錄的 dept_id 在 dept 表沒有匹配到 id,但是仍然會查詢出來,然后將右表的數據置為NULL
select * from emp as a left join dept as b on a.dept_id = b.id;
left join + where 的栗子
SQL分析
- 主表:emp
- 從表:dept
- 若不看where,前面的查詢結果和上面的栗子一樣
- where的作用:將上面的查詢結果集進行過濾,最終只返回 id 是 NULL的記錄
select * from emp as a left join dept as b on a.dept_id = b.id where b.id is null;
知識點
- 如果外連接中有 where 關鍵字,on是為了關聯兩張表,而where是將外連接查詢的結果集進行條件篩選
- 所以執行順序是:on -》 join -》 where
- on:篩選兩張表可以進行連接數據
- join:將篩選后的數據連接起來
- where:將連接后的數據結果集再次條件篩選
right join 的栗子
select * from emp as a right join dept as b on a.dept_id = b.id;
SQL分析
- 主表:dept
- 從表:emp
- 根據 dept 表的 id 和 emp 表的 dept_id 進行匹配
- 因為 dept 是主表,所以最后兩條記錄的 id 在 emp 表沒有匹配到 dept_id,但是仍然會查詢出來,然后將左表的數據置為NULL