簡單介紹MySQL資料庫的Join語法。
MySQL的Join比較常用到的是Inner Join、Left Join、Right Join以及Cross Join,其目的用以根據兩個或多個表中的列之間的關係,並結合這些表中查詢資料。簡單的來說就是將相關聯欄位的兩個或多個表的資料結合在一起做查詢。
以下舉個簡單的範例:
創建
表1(表格名稱:StudentName)及
表2(表格名稱:StudentGender)
表1(表格名稱:StudentName)StudentName |
ID | name |
1 | Bill |
3 | Mary |
4 | John |
7 | Emily |
8 | Ken |
表2(表格名稱:StudentGender)
StudentGender |
GID | gender |
1 | M |
2 | F |
3 | F |
4 | M |
5 | M |
Inner Join
SELECT * FROM `StudentName` INNER JOIN `StudentGender` ON `StudentName`.`ID` = `StudentGender`.`GID`;
執行結果:
ID
| name | GID | gender |
1 | Bill | 1 | M |
3 | Mary | 3 | F |
4 | John | 4 | M |
Inner Join就是只列出兩個表中某欄位具有相同資料的就結合在一起列出查詢結果,也就是取表1和表2某個別指定欄位資料的共同交集。語法中的ON就是用來判斷兩個表中的哪個欄位在兩表中都相同的就列出來。
我們由上得知,表1的ID欄位和表2的GID欄位有重複相同資料的就有3筆,而Inner Join就是只取這3個具有重複資料的結合在一起列出來。
Left Join
SELECT * FROM `StudentName` LEFT JOIN `StudentGender` ON `StudentName`.`ID` = `StudentGender`.`GID`;
執行結果:
ID
| name | GID | gender |
1 | Bill | 1 | M |
3 | Mary | 3 | F |
4 | John | 4 | M |
7 | Emily | (NULL) | (NULL)
|
8 | Ken | (NULL)
| (NULL)
|
而Left Join就是把「LEFT JOIN」這個字的左邊那個表(也就是表格名稱StudentName)的資料不管怎樣都要全部列出來,無論右邊那個表(也就是表格名稱StudentGender)到底有沒有跟左表的該指定欄位資料有重複。簡單來說,就是左表的資料都列出來,如果右表沒有跟左表一樣的資料,就印出NULL。
Right Join
SELECT * FROM `StudentName` RIGHT JOIN `StudentGender` ON `StudentName`.`ID` = `StudentGender`.`GID`;
執行結果:
ID
| name | GID | gender |
1 | Bill | 1 | M |
(NULL)
| (NULL)
| 2 | F |
3 | Mary | 3 | F |
4 | John | 4 | M
|
(NULL)
| (NULL)
| 5 | M
|
同理,Right Join就是把右表的資料通通列出,不管左表有沒有跟它具有相同重複的資料,沒有重複的話就印出NULL。
Cross Join
SELECT * FROM `StudentName` CROSS JOIN `StudentGender`;
執行結果:
ID
| name | GID | gender |
1 | Bill | 1 | M |
3
| Mary
| 1 | M |
4
| John
| 1 | M |
7 | Emily | 1 | M
|
8 | Ken
| 1 | M
|
1 | Bill | 2 | F |
3
| Mary
| 2 | F |
4
| John
| 2 | F |
7 | Emily | 2 | F
|
8 | Ken
| 2 | F
|
1 | Bill | 3 | F |
3
| Mary
| 3 | F |
4
| John
| 3 | F |
7 | Emily | 3 | F
|
8 | Ken
| 3 | F
|
1 | Bill | 4 | M |
3 | Mary | 4 | M |
4 | John
| 4 | M |
7 | Emily
| 4 | M |
8 | Ken
| 4 | M |
1 | Bill
| 5 | M |
3 | Mary | 5 | M
|
4 | John | 5 | M
|
7 | Emily
| 5 | M
|
8 | Ken
| 5 | M
|
Cross Join這個就比前三個較少見了。Cross Join顧名思義就是交叉著查詢,得到的結果是兩個表的「笛卡爾積(Cartesian product)」。
所謂的笛卡爾積就是將所有可能的組合通通列出來,所以可以看到上面查詢結果的表總共有25筆(5×5),把所有可能的組合都一一列出來。