mysql - SQL 這個 left jion 和 left outer jion 怎么結果是一樣的?
問題描述
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后,我看到結果還是一模一樣,用什么例子可以理解加和不加的區別呢?
問題解答
回答1: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.idUNIONSELECT * 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回答2:
這兩個應該就是一樣的吧。left join是left outer join的簡寫。你可以用explain extended和show warnings看到數據庫優化改寫之后的語句,兩個SQL是一樣的。
相關文章:
1. 怎樣使留言的數據與登錄的用戶名,密碼保持一致(在數據庫上是一行的)。2. java - 輸出4個不相等整數之間所有任意三個整數的乘積3. javascript - 一排三個框,各個框的間距是15px,距離外面的白框間距也是15px,這個css怎么寫?4. javascript - jqery 適應輪播,哪位前輩可以幫助小弟按照下面圖片寫一個大概例子,小弟在此跪謝!5. css3 - rem布局下,用戶瀏覽器的最小字號是12px怎么辦?6. css如何實現兩欄布局,左邊固定寬度,右邊寬度自適應,且高度和瀏覽器當前高度一致?7. css3 - CSSComb for Sublime Text 在 Windows 下無法使用。8. javascript - nodejs中使用request庫怎么抓取網頁中的圖片9. mysql money 插入數據為什么報錯?10. angular.js - 百度爬蟲如何處理“#”符號?
