自然連接:在連接條件中使用等于(=)運(yùn)算符比較被連接列的列值,但它使用選
創(chuàng)新互聯(lián)自2013年創(chuàng)立以來(lái),是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元舒城做網(wǎng)站,已為上家服務(wù),為舒城各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220
擇列表指出查詢結(jié)果集合中所包括的列,并刪除連接表中的重復(fù)列。
left join(左聯(lián)接) 返回包括左表中的所有記錄和右表中聯(lián)結(jié)字段相等的記錄;
左聯(lián)接兩表根據(jù)字段ID關(guān)聯(lián)嘛,比的自然連接要快,如果字段ID建立有索引,則更快.
但并不是加了索引就一定快,這個(gè)不一定的。在這里會(huì)更快
以下均為個(gè)人看法,不喜勿噴。
(1)寫法上的區(qū)別
現(xiàn)在是兩張表,寫起來(lái)簡(jiǎn)單,如果是多張表,多種連接,甚至包含子查詢,那么如果只存在左連接或者右連接,那么寫法上會(huì)麻煩很多。
比如 a left join b on XXX=xxxx
right join c XXX=xxxx
left join d XXX=xxx
where a.xxxx=F.xxxx
等等,甚至更麻煩一些,那么只存在一種連接的話,改寫起來(lái)就會(huì)比較麻煩。
(2)語(yǔ)句只是工具
習(xí)慣上我們一般會(huì)找一個(gè)主表(起主要作用的表),并從它開始寫相應(yīng)的語(yǔ)句,假設(shè)只存在一種連接,那么為了寫語(yǔ)句就可能會(huì)打亂思維方式。語(yǔ)句只是工具,當(dāng)然是怎么方便怎么來(lái),所以二者相應(yīng)的都存在。
(3)語(yǔ)言的規(guī)范性
我說(shuō)的是編程語(yǔ)言,只有左沒(méi)有右,就好像只有前沒(méi)有后,內(nèi)部解析的時(shí)候可能都是一樣的,但是外部寫作的時(shí)候必須是完整的,如果只有做沒(méi)有右,那么可能就是缺失的。
內(nèi)連接關(guān)鍵字:inner join;左連接:left join;右連接:right join。 內(nèi)連接是把匹配的關(guān)聯(lián)數(shù)據(jù)顯示出來(lái);左連接是左邊的表全部顯示出來(lái),右邊的表顯示出符合條件的數(shù)據(jù);右連接正好相反。
一般所說(shuō)的左連接,外連接是指左外連接,右外連接。做個(gè)簡(jiǎn)單的測(cè)試你看吧。
先說(shuō)左外連接和右外連接:
[TEST1@orcl#16-12月-11] SQLselect * from t1;
ID NAME
---------- --------------------
1 aaa
2 bbb
[TEST1@orcl#16-12月-11] SQLselect * from t2;
ID AGE
---------- ----------
1 20
3 30
左外連接:
[TEST1@orcl#16-12月-11] SQLselect * from t1 left join t2 on t1.id=t2.id;
ID NAME ID AGE
---------- -------------------- ---------- ----------
1 aaa 1 20
2 bbb
右外連接:
[TEST1@orcl#16-12月-11] SQLselect * from t1 right join t2 on t1.id=t2.id;
ID NAME ID AGE
---------- -------------------- ---------- ----------
1 aaa 1 20
3 30
從上面的顯示你可以看出:左外連接是以左邊的表為基準(zhǔn)。通俗的講,先將左邊的表全部顯示出來(lái),然后右邊的表id與左邊表id相同的記錄就“拼接”上去,比如說(shuō)id為1的記錄。如果沒(méi)有匹配的id,比如說(shuō)t1中id為2的t2中就沒(méi)有。那邊就以null顯示。
右外連接過(guò)程正好相反。
再看內(nèi)連接:
[TEST1@orcl#16-12月-11] SQLselect * from t1 inner join t2 on t1.id=t2.id;
ID NAME ID AGE
---------- -------------------- ---------- ----------
1 aaa 1 20
看到?jīng)]有? 只有一條記錄。內(nèi)連接就是只取出符合過(guò)濾條件的記錄 也就是t1.id=t2.id 那么符合t1.id=t2.id的記錄只有id=1這一條,所以只顯示一條。 不像外連接,是將你作為基準(zhǔn)的表(左外連接就是左邊表為基準(zhǔn),右外連接就是右邊表為基準(zhǔn))的所有行都顯示出來(lái)。
三種連接的語(yǔ)法
為便于更多的技友快速讀懂、理解,我們只討論2張表對(duì)象進(jìn)行連接操作的情況,大于2張表對(duì)象進(jìn)行的連接操作原理也是一樣的。
1.左連接(LEFT JOIN )
SELECT M.columnname……,N.* columnname…..
FROM left_table M LEFT JOIN right_table N ON M.columnname_join=N.columnname_join AND N.columnname=XXX
WHERE M.columnname=XXX…..