mysql - SQL 這個(gè) left jion 和 left outer jion 怎么結(jié)果是一樣的?
問(wèn)題描述
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對(duì)應(yīng)的類(lèi)名顯示出來(lái),
但是加上 OUTER后,我看到結(jié)果還是一模一樣,用什么例子可以理解加和不加的區(qū)別呢?
問(wèn)題解答
回答1:LEFT JOIN和LEFT OUTER JOIN是一樣的,只是通常我們寫(xiě)SQL語(yǔ)句的是時(shí)候把OUTER給省略了。這個(gè)可以理解像內(nèi)連接,我們寫(xiě)內(nèi)連接的時(shí)候,通常也是省略INNER,直接寫(xiě)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ò)關(guān)鍵UNION把左連接和右連接兩個(gè)語(yǔ)句連在一起
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),這個(gè)會(huì)涉及到笛卡爾積,笛卡爾積我個(gè)人理解就是兩個(gè)表交叉組合。所以得到的集合結(jié)果就是查詢到的A表符合條件的記錄*B表符合條件的記錄.
這個(gè)有個(gè)小坑,就是不能像內(nèi)連接和外連接一樣,給語(yǔ)句加上ON,如果加了,查詢結(jié)果就像內(nèi)連接一樣
SELECT * FROM a CROSS JOIN b where a.id=1回答2:
這兩個(gè)應(yīng)該就是一樣的吧。left join是left outer join的簡(jiǎn)寫(xiě)。你可以用explain extended和show warnings看到數(shù)據(jù)庫(kù)優(yōu)化改寫(xiě)之后的語(yǔ)句,兩個(gè)SQL是一樣的。
相關(guān)文章:
1. docker - 各位電腦上有多少個(gè)容器啊?容器一多,自己都搞混了,咋辦呢?2. javascript - webpack --hot 熱重載無(wú)效的問(wèn)題3. javascript - vue使用videojs+videojs-contrib-hls報(bào)錯(cuò)4. golang - 用IDE看docker源碼時(shí)的小問(wèn)題5. javascript - 怎么下載vue csp版本的2.0或者以上?6. io - java 文件操作,如何向指定的位置插入內(nèi)容 (不是替換內(nèi)容) ?7. Python 爬蟲(chóng) 遇到的問(wèn)題(手淘問(wèn)大家)8. mysql如何配置遠(yuǎn)程php外網(wǎng)鏈接數(shù)據(jù)庫(kù)9. javascript - 求救!網(wǎng)頁(yè)播放視頻只有聲音沒(méi)有畫(huà)面,網(wǎng)頁(yè)上傳視頻文件時(shí)怎么知道視頻的編碼為H264還是MPEG4??10. dockerfile - [docker build image失敗- npm install]
