Mysql常用sql語句(17)- left / right join 外連接


測試必備的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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM