最常用SQL joins:內連接(交集)、左外連接、右外連接、左連接、右連接、全連接(並集),全外連接


1、內連接。兩個表的公共部分用Inner join,Inner join是交集的部分。

Select * from TableA A inner join TableB B on A.key=B.key

 

2、左外連接A表和B表的共有,加上A的獨有,簡稱全A。

Select * from TableA A left join TableB B on A.key=B.key

紅色部分是兩表的公有部分,此時8號記錄是A表的獨有,右邊的部門表並沒有滿足的就用null補齊

3、右外連接A表和B表的共有,加上B的獨有,簡稱全B。

Select * from TableA A right join TableB B on A.key=B.key

紅色部分是兩表的公有部分,右表全部查出來,左表沒有滿足的就用null補齊。

不管是左連接還是右連接,連接之后表格的高度要一樣,不匹配的表全部用null對齊。

4、左連接A的獨有,把公有的去掉,A獨占就沒B什么事了。

On是join條件。

Select * from TabelA A left join TableB B on A.key=B.key where B.key is null

A表的獨占,即B表的Id必定等於null

5、右連接B的獨有,把公有的去掉,B獨占就沒A什么事了。

Select * from TableA A right join TableB B on A.key=B.key where A.key is null

B表的獨占,即A表的id肯定為null、

6、全連接。Full outer join是全連接。

 

 

Mysql不支持這種語法,但是oracle支持。

但是!MySQL中並不支持這種寫法,所以只能通過別的方法。A、B的所有也就是A的獨有、B的獨有 和A、B的共同擁有的數據,Mysql中可以使用:

select * from Table A left join Table B on A.Key = B.Key  (找出A的所有)

 union  (去重)

 select * from Table A right join Table B on A.Key = B.Key(找出B的所有)

7、全外連接(Mysql中不支持下圖寫法)左右表的共有數據之外的數據查詢 。各自獨有之和,偏偏沒有中間部分。

篩選出對於A表而言B為空,對於B表而言A為空的。MySQL中也不支持這種寫法,所以只能通過別的方法。其實全外連接也就是A的獨有+B的獨有。

Mysql語法:

select * from Table A left join Table B on A.Key = B.Key  where B.Key is null  (找出A的獨有)

 union (去重)

select * from Table A right join Table B on A.Key = B.Key where A.Key is null (找出B的獨有)

 


免責聲明!

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



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