left join,right join,inner join,full join之間的區別

2021-12-11 新一小蘭
left join,right join,inner join,full join之間的區別

通俗講:
left以 left join 左側的表為主表
right 以 right join 右側表為主表
inner join 查找的數據是左右兩張表共有的

full join,在兩張表進行連接查詢時,返回左表和右表中所有沒有匹配的行。

參考

https://www.cnblogs.com/assasion/p/7768931.html

https://blog.csdn.net/rongbo_j/article/details/46352337

sql中的連接查詢有inner join(內連接)、left join(左連接)、right join(右連接)、full join(全連接)四種方式,它們之間其實並沒有太大區別,僅僅是查詢出來的結果有所不同。
例如我們有兩張表:

Orders表通過外鍵Id_P和Persons表進行關聯。

1.inner join(內連接),在兩張表進行連接查詢時,只保留兩張表中完全匹配的結果集。

我們使用inner join對兩張表進行連接查詢,sql如下:

SELECT p.LastName, p.FirstName, o.OrderNo
FROM Persons p
INNER JOIN Orders o
ON p.Id_P=o.Id_P and 1=1  --用and連接多個條件
ORDER BY p.LastName

查詢結果集:

此種連接方式Orders表中Id_P欄位在Persons表中找不到匹配的,則不會列出來。

注意:單純的select * from a,b是笛卡爾乘積。比如a表有5條數據,b表有3條數據,那麼最後的結果有5*3=15條數據。

但是如果對兩個表進行關聯:select * from a,b where a.id = b.id 意思就變了,此時就等價於:

select * from a inner join b on a.id = b.id。即就是內連接。

但是這種寫法並不符合規範,可能只對某些資料庫管用,如sqlserver。推薦最好不要這樣寫。最好寫成inner join的寫法。

 

內連接查詢 (select * from a join b on a.id = b.id) 與 關聯查詢 (select * from a , b where a.id = b.id)的區別

 

2.left join,在兩張表進行連接查詢時,會返回左表所有的行,即使在右表中沒有匹配的記錄。

我們使用left join對兩張表進行連接查詢,sql如下:

SELECT p.LastName, p.FirstName, o.OrderNo
FROM Persons p
LEFT JOIN Orders o
ON p.Id_P=o.Id_P
ORDER BY p.LastName

查詢結果如下:

可以看到,左表(Persons表)中LastName為Bush的行的Id_P欄位在右表(Orders表)中沒有匹配,但查詢結果仍然保留該行。

3.right join,在兩張表進行連接查詢時,會返回右表所有的行,即使在左表中沒有匹配的記錄。

我們使用right join對兩張表進行連接查詢,sql如下:

SELECT p.LastName, p.FirstName, o.OrderNo
FROM Persons p
RIGHT JOIN Orders o
ON p.Id_P=o.Id_P
ORDER BY p.LastName

查詢結果如下:


Orders表中最後一條記錄Id_P欄位值為65,在左表中沒有記錄與之匹配,但依然保留。

4.full join,在兩張表進行連接查詢時,返回左表和右表中所有沒有匹配的行。

我們使用full join對兩張表進行連接查詢,sql如下:

SELECT p.LastName, p.FirstName, o.OrderNo
FROM Persons p
FULL JOIN Orders o
ON p.Id_P=o.Id_P
ORDER BY p.LastName

查詢結果如下:

查詢結果是left join和right join的併集。

這些連接查詢的區別也僅此而已。

原文連結:

https://www.cnblogs.com/lijingran/p/9001302.html

相關焦點

  • SQL語言中,inner join 、left join 、right join和full join的定義和圖示
    left join 是左連接,返回坐表中所有的行以及右表中符合條件的行。right join右連接,是返回右表中所有的行及左表中符合條件的行。full join全連接,是返回左表中所有的行及右表中所有的行,並按條件連接。
  • inner join 與 left join 之間的區別
    關於inner join 與 left join 之間的區別,以前以為自己搞懂了,今天從前端取參數的時候發現不是預想中的結果
  • SQL表連接查詢(inner join、full join、left join、right join)
    select s.name,m.mark from student s inner join mark m on s.id=m.studentid符合條件的只有兩條結果,查出結果為: 二、左連接-left join:左連接是把左邊的表的元組全部選出來:select
  • inner join 與 left join 之間的區別,你真的搞懂了嗎?
    join 與 left join 之間的區別,以前以為自己搞懂了,今天從前端取參數的時候發現不是預想中的結果,才知道問題出在inner join 上了。一、sql的left join 、right join 、inner join之間的區別left join(左聯接) :返回包括左表中的所有記錄和右表中聯結欄位相等的記錄right join(右聯接) :返回包括右表中的所有記錄和左表中聯結欄位相等的記錄inner join(等值連接) :只返回兩個表中聯結欄位相等的行舉例如下:
  • 【面試必備】SQL中left join、right join、inner join的區別
    joinsql語句如下:select * from Aleft join B on A.aID = B.bID結果如下:aID     aNum     bID     bName1     a20050111    1     20060324012     a20050112    2
  • left join、right join和join ???
    點擊上方「JAVA」,星標公眾號重磅乾貨,第一時間送達說到SQL,很多人可能用了挺久,但依然有個問題一直困擾著,那就是 leftjoin、 join、 right join和 inner join等等各種 join的區別。
  • left join、right join和join,傻傻分不清?
    我是帥帥的玉米segmentfault.com/a/1190000017369618說到SQL,很多人可能用了挺久,但依然有個問題一直困擾著,那就是 leftjoin、 join、 right join和 inner join等等各種 join的區別。
  • 超詳細mysql left join,right join,inner join用法分析
    join是以A表的記錄為基礎的,A可以看成左表,B可以看成右表,left join是以左表為準的. 2.right join(右聯接) sql語句如下:  SELECT  * FROM a RIGHT JOING b  ON a.aID = b.bID 結果如下: aID        aNum                   bID           bName 1            a20050111
  • 圖解 5 種 Join 連接及實戰案例!(inner/ left/ right/ full/ cross)
    Join 連接在日常開發用得比較多,但大家都搞清楚了它們的使用區別嗎??
  • Mysql left join 轉 inner join
    在日常優化過程中,發現一個怪事情,同一個SQL出現兩個完全不一樣執行計劃,left join 連驅動表都可以變成不一樣。
  • MySQL join 學習
    join語義上等效為從笛卡爾乘積中選出符合條件的交集記錄+右表剩餘的所有記錄full joinMySQL 並不支持 full join,不過可以等效為相同條件的 left join 與 right 的 unionfull join 補充說明,在 MySQL 中如下語句是一個典型的 Full join:1 2 3select * from t1 left join t2 on t2.name
  • left semi join和left join區別
    一 使用對比(a表和b表通過user_id關聯)1.1 a表數據
  • SQL基礎-連接(join)
    多表連接(join)查詢是指通過多張表之間共同列的相關性來查詢數據。
  • left semi join 與 inner join 相同點與區別
    今天無意中發現了left semi join這種連接關鍵字的用法,在這裡分享一下,避免大家以後踩坑。1.
  • LEFT JOIN的時候應該用ON還是WHERE?
    說的是LEFT JOIN關聯表中ON,WHERE後面跟條件的區別。當時確實有點懵逼~經常做這種left join,inner join連接,卻發現居然只是模糊的認識。回到家後,馬上開啟了「實踐是檢驗真理的唯一標準」模式。三下五除二,建了兩張表嘗試起來。
  • Left Join 後用 on 還是 where,區別大了!
    前天寫SQL時本想通過 A left B join on and 後面的條件來使查出的兩條記錄變成一條,奈何發現還是有兩條。後來發現 join on and 不會過濾結果記錄條數,只會根據and後的條件是否顯示 B表的記錄,A表的記錄一定會顯示。
  • SQL的各種連接(cross join、inner join、full join)的用法理解
    WHERE條件子句,它將會返回被連接的兩個表的笛卡爾積,返回結果的行數等於兩個表行數的乘積;舉例,下列A、B、C 執行結果相同,但是效率不一樣:A:SELECT * FROM table1 CROSS JOIN table2B:SELECT * FROM table1,table2C:select * from table1 a inner
  • SQL語句中 LEFT JOIN後用 ON 還是 WHERE,區別大了!
    在使用left join時,on和where條件的區別如下:1、 on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。這時已經沒有left join的含義(必須返回左邊表的記錄)了,條件不為真的就全部過濾掉。假設有兩張表:表1:tab2
  • SQL語句中 left join 後用 on 還是 where,區別大了!
    運行sql : select * from student s left join class c on s.classId=c.id order by s.id運行sql : select * from student s left join class c on s.classId=c.id and s.name="張三" order by
  • Join,left join,right join(1)--連接原理(三十九)
    >++-+-++----+--+| 20180101 | 杜子騰 | 軟體學院 | 20180101 | 母豬的產後護理| 78 || 20180101 | 杜子騰 | 軟體學院 | 20180101 | 論薩達姆的戰爭準備 |