載入中
載入中
載入錯誤
還在載入中,請稍候...

    Tetsuhiko的筆記

    MySQL的Join語法

    • 2020-01-08 13:18:01
    • 6554
    • 資料庫
    • Tetsuhiko

    簡單介紹MySQL資料庫的Join語法。
    MySQL的Join比較常用到的是Inner JoinLeft JoinRight Join以及Cross Join,其目的用以根據兩個或多個表中的列之間的關係,並結合這些表中查詢資料。簡單的來說就是將相關聯欄位的兩個或多個表的資料結合在一起做查詢。


    以下舉個簡單的範例:
    創建表1(表格名稱:StudentName)表2(表格名稱:StudentGender)

    表1(表格名稱:StudentName)
    StudentName
    IDname
    1 Bill
    3 Mary
    4 John
    7 Emily
    8 Ken

    表2(表格名稱:StudentGender)
    StudentGender
    GIDgender
    1 M
    2 F
    3 F
    4 M
    5 M


    Inner Join
    SELECT * FROM `StudentName` INNER JOIN `StudentGender` ON `StudentName`.`ID` = `StudentGender`.`GID`;
    執行結果:
    ID
    nameGIDgender
    1 Bill1M
    3 Mary3 F
    4 John4M
    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
    nameGIDgender
    1 Bill1M
    3 Mary3 F
    4 John4M
    7Emily(NULL)(NULL)
    8Ken(NULL)
    (NULL)
    Left Join就是把「LEFT JOIN」這個字的左邊那個表(也就是表格名稱StudentName)的資料不管怎樣都要全部列出來,無論右邊那個表(也就是表格名稱StudentGender)到底有沒有跟左表的該指定欄位資料有重複。簡單來說,就是左表的資料都列出來,如果右表沒有跟左表一樣的資料,就印出NULL

    Right Join
    SELECT * FROM `StudentName` RIGHT JOIN `StudentGender` ON `StudentName`.`ID` = `StudentGender`.`GID`;
    執行結果:
    ID
    nameGIDgender
    1 Bill1M
    (NULL)
    (NULL)
    2 F
    3Mary3F
    4John4M
    (NULL)
    (NULL)
    5M
    同理,Right Join就是把右表的資料通通列出,不管左表有沒有跟它具有相同重複的資料,沒有重複的話就印出NULL

    Cross Join
    SELECT * FROM `StudentName` CROSS JOIN `StudentGender`;
    執行結果:
    ID
    nameGIDgender
    1 Bill1M
    3
    Mary
    1 M
    4
    John
    1M
    7Emily1M
    8Ken
    1M
    1 Bill2F
    3
    Mary
    2F
    4
    John
    2F
    7Emily2F
    8Ken
    2F
    1 Bill3F
    3
    Mary
    3F
    4
    John
    3F
    7Emily3F
    8Ken
    3F
    1 Bill4M
    3Mary4M
    4John
    4 M
    7Emily
    4 M
    8Ken
    4M
    1Bill
    5M
    3Mary5M
    4John5M
    7Emily
    5M
    8Ken
    5M
    Cross Join這個就比前三個較少見了。Cross Join顧名思義就是交叉著查詢,得到的結果是兩個表的「笛卡爾積(Cartesian product)」。
    所謂的笛卡爾積就是將所有可能的組合通通列出來,所以可以看到上面查詢結果的表總共有25筆(5×5),把所有可能的組合都一一列出來。
    Top