表A如下:
| aID |
aNum |
| 1 |
a20110111 |
| 2 |
a20110112 |
| 3 |
a20110113 |
| 4 |
a20110114 |
| 5 |
a20110115 |
表B如下:
| bID |
bName |
| 1 |
bName0111 |
| 2 |
bName0112 |
| 3 |
bName0113 |
| 4 |
bName0114 |
| 8 |
bName0118 |
一、left join … on
MySQL語句:
SELECT * FROM a LEFT JOIN b ON a.aID = b.bID
結果如下:
| aID |
aNum |
bID |
bName |
| 1 |
a20110111 |
1 |
bName0111 |
| 2 |
a20110112 |
2 |
bName0112 |
| 3 |
a20110113 |
3 |
bName0113 |
| 4 |
a20110114 |
4 |
bName0114 |
| 5 |
a20110115 |
NULL |
NULL |
說明:
left join是以A表的記錄為基礎,A可以看成左表,B可以看成右表,left join是以左表為準的。換句話說,左表(A)的記錄將會全部表示出來,而右表(B)只會顯示複合搜尋條件的記錄(例子中為:A.aID = B.bID)。
B表記錄不足的地方均為NULL。
二、right join … on
MySQL語句如下:
SELECT * FROM a RIGHT JOIN b ON a.aID = b.bID
結果如下:
| aID |
aNum |
bID |
bName |
| 1 |
a20110111 |
1 |
bName0111 |
| 2 |
a20110112 |
2 |
bName0112 |
| 3 |
a20110113 |
3 |
bName0113 |
| 4 |
a20110114 |
4 |
bName0114 |
| NULL |
NULL |
8 |
bName0118 |
說明:
right join 和 left join的結果剛好相反,這次是以右表(B)為基礎的,A表不足的地方用NULL填充。
三、inner join … on
MySQL語句如下:
SELECT * FROM a INNER JOIN b ON a.aID = b.bID
等同於:
SELECT * FROM a, b WHERE a.aID = b.bID
結果如下:
| aID |
aNum |
bID |
bName |
| 1 |
a20110111 |
1 |
bName0111 |
| 2 |
a20110112 |
2 |
bName0112 |
| 3 |
a20110113 |
3 |
bName0113 |
| 4 |
a20110114 |
4 |
bName0114 |
說明:
inner join並不以誰為基礎,它只是顯示合格記錄。
LEFT JOIN操作用於在任何的FROME字句中。