mysql - SQL 这个 left jion 和 left outer jion 怎么结果是一样的?
巴扎黑
巴扎黑 2017-04-17 14:45:08
0
2
625
SELECT b.id,b.cid,b.name,t.type FROM shbooks b LEFT JOIN shtype t ON t.id = b.cid;

SELECT b.id,b.cid,b.name,t.type FROM shbooks b LEFT OUTER JOIN shtype t ON t.id = b.cid;

不加OUTER的时候,我完全能理解,把表1在表2对应的类名显示出来,

但是加上 OUTER后,我看到结果还是一模一样,用什么例子可以理解加和不加的区别呢?

巴扎黑
巴扎黑

全部回覆(2)
巴扎黑

LEFT JOIN和LEFT OUTER JOIN是一樣的,只是通常我們寫SQL語句的是時候把OUTER給省略了。這個可以理解像內連接,我們寫內連接的時候,通常也是省略INNER,直接寫JOIN

多錶連結有

  • 內連接(JOIN 或 INNER JOIN)

    SELECT * FROM a [INNER] JOIN b ON a.id=b.id
  • 外連接

    • 左連接或稱為左外接連接(LEFT JOIN 或 LEFT OUTER JOIN)

      SELECT * FROM a LEFT [OUTER] JOIN b ON a.id=b.id
    • 右連接或叫右外接(RIGHT JOIN 或 RIGHT OUTER JOIN)

      SELECT * FROM a RIGHT [OUTER] JOIN b ON a.id=b.id 
    • 完全外連接,就是透過關鍵UNION把左連接和右連接兩個語句連在一起

      SELECT * FROM a LEFT [OUTER] JOIN b ON a.id=b.id
      UNION
      SELECT * FROM a RIGHT [OUTER] JOIN b ON a.id=b.id
  • 交叉連接(CROSS JOIN),這個會涉及到笛卡爾積,笛卡爾積我個人理解就是兩個表交叉組合。所以得到的集合結果​​就是查詢到的A表符合條件的記錄*B表符合條件的記錄.

這個有個小坑,就是不能像內連接和外連接一樣,給語句加上ON,如果加了,查詢結果就像內連接一樣

SELECT * FROM a CROSS JOIN b where a.id=1
Peter_Zhu

這兩個應該就是一樣的吧。
left join是left outer join的簡寫。
你可以用explain extended和show warnings看到資料庫最佳化改寫之後的語句,兩個SQL是一樣的。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!