《Mysql入門超詳細mysql left join,right join,inner join用法分析》要點:
本文介紹了Mysql入門超詳細mysql left join,right join,inner join用法分析,希望對您有用。如果有疑問,可以聯系我們。
下面是例子分析
表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
創建這兩個表SQL語句如下:
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'?)?;
實驗如下:
1.left?join(左聯接)
sql語句如下:?
SELECT?*?FROM?a
LEFT?JOIN??b?
ON?a.aID?=b.bID
結果如下:
aID????????aNum???????????????????bID???????????bName
1????????????a20050111?????????1???????????????2006032401
2????????????a20050112?????????2??????????????2006032402
3????????????a20050113?????????3??????????????2006032403
4????????????a20050114?????????4??????????????2006032404
5????????????a20050115?????????NULL???????NULL
(所影響的行數為?5?行)
結果說明:
????????left?join是以A表的記錄為基礎的,A可以看成左表,B可以看成右表,left?join是以左表為準的.
換句話說,左表(A)的記錄將會全部表示出來,而右表(B)只會顯示符合搜索條件的記錄(例子中為:?A.aID?=?B.bID).
B表記錄不足的地方均為NULL.
2.right?join(右聯接)
sql語句如下:?
SELECT??*?FROM?a
RIGHT?JOING?b?
ON?a.aID?=?b.bID
結果如下:
aID????????aNum???????????????????bID???????????bName
1????????????a20050111?????????1???????????????2006032401
2????????????a20050112?????????2??????????????2006032402
3????????????a20050113?????????3??????????????2006032403
4????????????a20050114?????????4??????????????2006032404
NULL????NULL???????????????????8??????????????2006032408
(所影響的行數為?5?行)
結果說明:
????????仔細觀察一下,就會發現,和left?join的結果剛好相反,這次是以右表(B)為基礎的,A表不足的地方用NULL填充.
3.inner?join(相等聯接或內聯接)
sql語句如下:?
SELECT?*?FROM??a
INNER?JOIN??b
ON?a.aID?=b.bID
等同于以下SQL句:
SELECT?*?
FROM?a,b
WHERE?a.aID?=?b.bID
結果如下:
aID????????aNum???????????????????bID???????????bName
1????????????a20050111?????????1???????????????2006032401
2????????????a20050112?????????2??????????????2006032402
3????????????a20050113?????????3??????????????2006032403
4????????????a20050114?????????4??????????????2006032404
結果說明:
????????很明顯,這里只顯示出了?A.aID?=?B.bID的記錄.這說明inner?join并不以誰為基礎,它只顯示符合條件的記錄.
LEFT?JOIN操作用于在任何的?FROM?子句中,
組合來源表的記錄.使用?LEFT?JOIN?運算來創建一個左邊外部聯接.左邊外部聯接將包含了從第一個(左邊)開始的兩個表中的全部記錄,即
使在第二個(右邊)表中并沒有相符值的記錄.?
語法:FROM?table1?LEFT?JOIN?table2?ON?table1.field1?compopr?table2.field2?
說明:table1,?table2參數用于指定要將記錄組合的表的名稱.
field1,?field2參數指定被聯接的字段的名稱.且這些字段必須有相同的數據類型及包含相同類型的數據,但它們不需要有相同的
名稱.
compopr參數指定關系比較運算符:"=",?"<",?">",?"<=",?">="?或?"<>".
如果在INNER?JOIN操作中要聯接包含Memo?數據類型或?OLE?Object?數據類型數據的字段,將會發生錯誤.
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/5018.html