超详细mysql left join,right join,inner join用法分析
http://www.jb51.net/article/15386.htm
下面是例子分析
表A記錄如下:?
aID ? ? ? ?aNum?
1 ? ? ? ? ? a20050111?
2 ? ? ? ? ? a20050112?
3 ? ? ? ? ? a20050113?
4 ? ? ? ? ? a20050114?
5 ? ? ? ? ? a20050115?
表B記錄如下:?
bID ? ? ? ?bName?
1 ? ? ? ? ? ?2006032401?
2 ? ? ? ? ? 2006032402?
3 ? ? ? ? ? 2006032403?
4 ? ? ? ? ? 2006032404?
8 ? ? ? ? ? 2006032408?
創(chuàng)建這兩個(gè)表SQL語(yǔ)句如下:?
CREATE TABLE ?a?
aID int( 1 ) AUTO_INCREMENT PRIMARY KEY ,?
aNum char( 20 )?
)?
CREATE TABLE b(?
bID int( 1 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,?
bName char( 20 ) ?
)?
INSERT INTO a?
VALUES ( 1, 'a20050111' ) , ( 2, 'a20050112' ) , ( 3, 'a20050113' ) , ( 4, 'a20050114' ) , ( 5, 'a20050115' ) ;?
INSERT INTO b?
VALUES ( 1, ' 2006032401' ) , ( 2, '2006032402' ) , ( 3, '2006032403' ) , ( 4, '2006032404' ) , ( 8, '2006032408' ) ;?
實(shí)驗(yàn)如下:?
1.left join(左聯(lián)接)?
sql語(yǔ)句如下: ?
SELECT * FROM a?
LEFT JOIN ?b ?
ON a.aID =b.bID?
結(jié)果如下:?
aID ? ? ? ?aNum ? ? ? ? ? ? ? ? ? bID ? ? ? ? ? bName?
1 ? ? ? ? ? ?a20050111 ? ? ? ? 1 ? ? ? ? ? ? ? 2006032401?
2 ? ? ? ? ? ?a20050112 ? ? ? ? 2 ? ? ? ? ? ? ?2006032402?
3 ? ? ? ? ? ?a20050113 ? ? ? ? 3 ? ? ? ? ? ? ?2006032403?
4 ? ? ? ? ? ?a20050114 ? ? ? ? 4 ? ? ? ? ? ? ?2006032404?
5 ? ? ? ? ? ?a20050115 ? ? ? ? NULL ? ? ? NULL?
(所影響的行數(shù)為 5 行)?
結(jié)果說(shuō)明:?
? ? ? ? left join是以A表的記錄為基礎(chǔ)的,A可以看成左表,B可以看成右表,left join是以左表為準(zhǔn)的.?
換句話說(shuō),左表(A)的記錄將會(huì)全部表示出來(lái),而右表(B)只會(huì)顯示符合搜索條件的記錄(例子中為: A.aID = B.bID).?
B表記錄不足的地方均為NULL.?
2.right join(右聯(lián)接)?
sql語(yǔ)句如下: ?
SELECT ?* FROM a?
RIGHT JOING b ?
ON a.aID = b.bID?
結(jié)果如下:?
aID ? ? ? ?aNum ? ? ? ? ? ? ? ? ? bID ? ? ? ? ? bName?
1 ? ? ? ? ? ?a20050111 ? ? ? ? 1 ? ? ? ? ? ? ? 2006032401?
2 ? ? ? ? ? ?a20050112 ? ? ? ? 2 ? ? ? ? ? ? ?2006032402?
3 ? ? ? ? ? ?a20050113 ? ? ? ? 3 ? ? ? ? ? ? ?2006032403?
4 ? ? ? ? ? ?a20050114 ? ? ? ? 4 ? ? ? ? ? ? ?2006032404?
NULL ? ?NULL ? ? ? ? ? ? ? ? ? 8 ? ? ? ? ? ? ?2006032408?
(所影響的行數(shù)為 5 行)?
結(jié)果說(shuō)明:?
? ? ? ? 仔細(xì)觀察一下,就會(huì)發(fā)現(xiàn),和left join的結(jié)果剛好相反,這次是以右表(B)為基礎(chǔ)的,A表不足的地方用NULL填充.?
3.inner join(相等聯(lián)接或內(nèi)聯(lián)接)?
sql語(yǔ)句如下: ?
SELECT * FROM ?a?
INNER JOIN ?b?
ON a.aID =b.bID?
等同于以下SQL句:?
SELECT * ?
FROM a,b?
WHERE a.aID = b.bID?
結(jié)果如下:?
aID ? ? ? ?aNum ? ? ? ? ? ? ? ? ? bID ? ? ? ? ? bName?
1 ? ? ? ? ? ?a20050111 ? ? ? ? 1 ? ? ? ? ? ? ? 2006032401?
2 ? ? ? ? ? ?a20050112 ? ? ? ? 2 ? ? ? ? ? ? ?2006032402?
3 ? ? ? ? ? ?a20050113 ? ? ? ? 3 ? ? ? ? ? ? ?2006032403?
4 ? ? ? ? ? ?a20050114 ? ? ? ? 4 ? ? ? ? ? ? ?2006032404?
結(jié)果說(shuō)明:?
? ? ? ? 很明顯,這里只顯示出了 A.aID = B.bID的記錄.這說(shuō)明inner join并不以誰(shuí)為基礎(chǔ),它只顯示符合條件的記錄.?
LEFT JOIN操作用于在任何的 FROM 子句中,?
組合來(lái)源表的記錄。使用 LEFT JOIN 運(yùn)算來(lái)創(chuàng)建一個(gè)左邊外部聯(lián)接。左邊外部聯(lián)接將包含了從第一個(gè)(左邊)開(kāi)始的兩個(gè)表中的全部記錄,即?
使在第二個(gè)(右邊)表中并沒(méi)有相符值的記錄。 ?
語(yǔ)法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2 ?
說(shuō)明:table1, table2參數(shù)用于指定要將記錄組合的表的名稱。?
field1, field2參數(shù)指定被聯(lián)接的字段的名稱。且這些字段必須有相同的數(shù)據(jù)類(lèi)型及包含相同類(lèi)型的數(shù)據(jù),但它們不需要有相同的?
名稱。?
compopr參數(shù)指定關(guān)系比較運(yùn)算符:"=", "<", ">", "<=", ">=" 或 "<>"。?
如果在INNER JOIN操作中要聯(lián)接包含Memo 數(shù)據(jù)類(lèi)型或 OLE Object 數(shù)據(jù)類(lèi)型數(shù)據(jù)的字段,將會(huì)發(fā)生錯(cuò)誤。?
詳細(xì)出處參考:http://www.jb51.net/article/15386.htm
總結(jié)
以上是生活随笔為你收集整理的超详细mysql left join,right join,inner join用法分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: XSD /xml 跟元素声明
- 下一篇: 在控制台显示sql语句,类似hibern