資源描述:
《sql語(yǔ)句中join的用法和效率說(shuō)明》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、數(shù)據(jù)庫(kù)join語(yǔ)句使用及效率說(shuō)明在我們開(kāi)發(fā)數(shù)據(jù)庫(kù)的時(shí)候,一定要時(shí)刻考慮效率的要求個(gè)人建議當(dāng)多表關(guān)聯(lián)的時(shí)候,盡量少用innerjoin2010宋述臣第1章目錄第1章Sql之leftjoin、rightjoin、innerjoin的區(qū)別3第2章INNERJOIN和leftJOIN82.1現(xiàn)在比較:leftjoin和innerjoin9第3章提升leftjoin效率11第4章SQLServer中Innerjoin和where的效率差異11第1章Sql之leftjoin、rightjoin、innerjoin的
2、區(qū)別leftjoin(左聯(lián)接)返回包括左表中的所有記錄和右表中聯(lián)結(jié)字段相等的記錄rightjoin(右聯(lián)接)返回包括右表中的所有記錄和左表中聯(lián)結(jié)字段相等的記錄innerjoin(等值連接)只返回兩個(gè)表中聯(lián)結(jié)字段相等的行舉例如下:--------------------------------------------表A記錄如下:aIDaNum1a200501112a200501123a200501134a200501145a20050115表B記錄如下:bIDbName12006032401220060
3、32402320060324034200603240482006032408--------------------------------------------1.leftjoinsql語(yǔ)句如下:select*fromAleftjoinBonA.aID=B.bID結(jié)果如下:aIDaNumbIDbName1a20050111 120060324012a20050112 220060324023a20050113 320060324034a20050114 42006032404
4、5a20050115 NULLNULL(所影響的行數(shù)為5行)結(jié)果說(shuō)明:leftjoin是以A表的記錄為基礎(chǔ)的,A可以看成左表,B可以看成右表,leftjoin是以左表為準(zhǔn)的.換句話說(shuō),左表(A)的記錄將會(huì)全部表示出來(lái),而右表(B)只會(huì)顯示符合搜索條件的記錄(例子中為:A.aID=B.bID).B表記錄不足的地方均為NULL.--------------------------------------------2.rightjoinsql語(yǔ)句如下:select*fromArightjoinBonA
5、.aID=B.bID結(jié)果如下:aIDaNumbIDbName1a20050111 120060324012a20050112 220060324023a20050113 320060324034a20050114 42006032404NULLNULL82006032408(所影響的行數(shù)為5行)結(jié)果說(shuō)明:仔細(xì)觀察一下,就會(huì)發(fā)現(xiàn),和leftjoin的結(jié)果剛好相反,這次是以右表(B)為基礎(chǔ)的,A表不足的地方用NULL填充.-------------------------------
6、-------------3.innerjoinsql語(yǔ)句如下:select*fromAinnerjoinBonA.aID=B.bID結(jié)果如下:aIDaNumbIDbName1a20050111 120060324012a20050112 220060324023a20050113 320060324034a20050114 42006032404結(jié)果說(shuō)明:很明顯,這里只顯示出了A.aID=B.bID的記錄.這說(shuō)明innerjoin并不以誰(shuí)為基礎(chǔ),它只顯示符合條件的記錄.----
7、----------------------------------------注:LEFTJOIN操作用于在任何的FROM子句中,組合來(lái)源表的記錄。使用LEFTJOIN運(yùn)算來(lái)創(chuàng)建一個(gè)左邊外部聯(lián)接。左邊外部聯(lián)接將包含了從第一個(gè)(左邊)開(kāi)始的兩個(gè)表中的全部記錄,即使在第二個(gè)(右邊)表中并沒(méi)有相符值的記錄。語(yǔ)法:FROMtable1LEFTJOINtable2ONtable1.field1compoprtable2.field2說(shuō)明:table1,table2參數(shù)用于指定要將記錄組合的表的名稱。field1
8、,field2參數(shù)指定被聯(lián)接的字段的名稱。且這些字段必須有相同的數(shù)據(jù)類型及包含相同類型的數(shù)據(jù),但它們不需要有相同的名稱。compopr參數(shù)指定關(guān)系比較運(yùn)算符:"=","<",">","<=",">="或"<>"。如果在INNERJOIN操作中要聯(lián)接包含Memo數(shù)據(jù)類型或OLEObject數(shù)據(jù)類型數(shù)據(jù)的字段,將會(huì)發(fā)生錯(cuò)誤.@時(shí)間漩渦用上面提到的A、B表為例:select*fromAleftjoin(selectbID,bNamefromBwh