mysql - SQL 這個 left jion 和 left outer jion 怎么結(jié)果是一樣的?
問題描述
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的時(shí)候,我完全能理解,把表1在表2對應(yīng)的類名顯示出來,
但是加上 OUTER后,我看到結(jié)果還是一模一樣,用什么例子可以理解加和不加的區(qū)別呢?
問題解答
回答1:LEFT JOIN和LEFT OUTER JOIN是一樣的,只是通常我們寫SQL語句的是時(shí)候把OUTER給省略了。這個可以理解像內(nèi)連接,我們寫內(nèi)連接的時(shí)候,通常也是省略INNER,直接寫JOIN
多表鏈接有
內(nèi)連接(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
完全外連接,就是通過關(guān)鍵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),這個會涉及到笛卡爾積,笛卡爾積我個人理解就是兩個表交叉組合。所以得到的集合結(jié)果就是查詢到的A表符合條件的記錄*B表符合條件的記錄.
這個有個小坑,就是不能像內(nèi)連接和外連接一樣,給語句加上ON,如果加了,查詢結(jié)果就像內(nèi)連接一樣
SELECT * FROM a CROSS JOIN b where a.id=1回答2:
這兩個應(yīng)該就是一樣的吧。left join是left outer join的簡寫。你可以用explain extended和show warnings看到數(shù)據(jù)庫優(yōu)化改寫之后的語句,兩個SQL是一樣的。
相關(guān)文章:
1. 這是什么情況???2. javascript - 關(guān)于input="file",重復(fù)選擇同一文件時(shí)不觸發(fā)change事件的問題3. thinkphp3 count()方法必須加上字段?4. mysql 5個left關(guān)鍵 然后再用搜索條件 幾千條數(shù)據(jù)就會卡,如何解決呢5. python - 《flask web 開發(fā)》一書,數(shù)據(jù)庫中多對多關(guān)系的實(shí)現(xiàn)問題?6. python - 這句是什么錯誤?7. 輸入地址報(bào)以下截圖錯誤,怎么辦?8. mysql - SQL server 誤用delete 怎么恢復(fù)?9. 怎么php怎么通過數(shù)組顯示sql查詢結(jié)果呢,查詢結(jié)果有多條,如圖。我要forsearch里面echo10. python中return 語句與 分支語句連用問題
