聯(lián)合查詢效率較高,以下例子來(lái)說(shuō)明聯(lián)合查詢(內(nèi)聯(lián)、左聯(lián)、右聯(lián)、全聯(lián))的好處:
T1表結(jié)構(gòu) | userid | username | password |
| 1 | jack | jackpwd |
| 2 | owen | owenpwd |
| |||
T2表結(jié)構(gòu) | userid | jifen | dengji |
| 1 | 20 | 3 |
| 3 | 50 | 6 |
第一:內(nèi)聯(lián)(inner join)。
如果想把用戶信息、積分、等級(jí)都列出來(lái),那么一般會(huì)這樣寫:select * from T1 ,T3 where T1.userid = T3.userid(其實(shí)這樣的結(jié)果等同于select * from T1 inner join T3 on T1.userid=T3.userid )。
把兩個(gè)表中都存在userid的行拼成一行(即內(nèi)聯(lián)),但后者的效率會(huì)比前者高很多,建議用后者(內(nèi)聯(lián))的寫法。
SQL語(yǔ)句:select * from T1 inner join T2 on T1.userid=T2.userid
運(yùn)行結(jié)果 | T1.userid | username | password | T2.userid | jifen | dengji |
| 1 | jack | jackpwd | 1 | 20 | 3 |
第二:左聯(lián)(left outer join)。
顯示左表T1中的所有行,并把右表T2中符合條件加到左表T1中;右表T2中不符合條件,就不用加入結(jié)果表中,并且NULL表示。
SQL語(yǔ)句:select * from T1 left outer join T2 on T1.userid=T2.userid
運(yùn)行結(jié)果 | T1.userid | username | password | T2.userid | jifen | dengji |
| 1 | jack | jackpwd | 1 | 20 | 3 |
| 2 | owen | owenpwd | NULL | NULL | NULL |
第三:右聯(lián)(right outer join)。
顯示右表T2中的所有行,并把左表T1中符合條件加到右表T2中;左表T1中不符合條件,就不用加入結(jié)果表中,并且NULL表示。
SQL語(yǔ)句:select * from T1 right outer join T2 on T1.userid=T2.userid
運(yùn)行結(jié)果 | T1.userid | username | password | T2.userid | jifen | dengji |
| 1 | jack | jackpwd | 1 | 20 | 3 |
| NULL | NULL | NULL | 3 | 50 | 6 |
第四:全聯(lián)(full outer join)。
顯示左表T1、右表T2兩邊中的所有行,即把左聯(lián)結(jié)果表+右聯(lián)結(jié)果表組合在一起,然后過(guò)濾掉重復(fù)的。
SQL語(yǔ)句:select * from T1 full outer join T2 on T1.userid=T2.userid
運(yùn)行結(jié)果 | T1.userid | username | password | T2.userid | jifen | dengji |
| 1 | jack | jackpwd | 1 | 20 | 3 |
| 2 | owen | owenpwd | NULL | NULL | NULL |
| NULL | NULL | NULL | 3 | 50 | 6 |
總結(jié),關(guān)于聯(lián)合查詢,效率的確比較高,4種聯(lián)合方式如果可以靈活使用,基本上復(fù)雜的語(yǔ)句結(jié)構(gòu)也會(huì)簡(jiǎn)單起來(lái)。這4種方式是:1)Inner join 2)left outer join 3)right outer join 4)full outer join