SQL JOIN是資料庫查詢時,將多個資料表根據共同欄位的值合併的強大工具。你可以利用SQL連接,快速整合來自不同表格的資料,讓查詢結果更完整。只要掌握JOIN的用法,就能有效提升資料處理的效率。
你在查詢資料時,常常會遇到需要同時取得多個資料表的資訊。JOIN就是一種讓你根據共同欄位,把不同資料表的資料合併起來的方法。你可以想像JOIN像是一座橋,幫助你把分散在不同表格的資料連接在一起。這樣一來,你就能一次查到完整的資訊,而不用分開查詢再手動整理。
例如:你有一個「學生」表格和一個「成績」表格。透過JOIN,你可以直接查出每位學生的分數,而不用分別查詢兩個表格。
SQL連接的核心,就是根據兩個表格中相同的欄位(例如ID或編號),把資料合併成一個查詢結果。這個功能讓你在處理資料時變得更有效率,也能減少重複的工作。
你在學校、公司或日常生活中,經常會遇到需要整合多個資料來源的情況。SQL連接在這些場景中扮演非常重要的角色:
小提醒:只要你想要把不同表格的資料「合併查詢」,幾乎都會用到SQL連接。這是資料庫查詢中不可或缺的技能。
你只要學會使用JOIN,就能大幅提升資料處理的效率。無論是學校作業還是職場專案,SQL連接都能幫你快速整合資訊,讓你的查詢結果更完整、更有價值。
你在學習SQL連接時,會發現有好幾種不同的JOIN方式。每一種JOIN都會影響查詢結果中資料的保留範圍。下面我會帶你認識五種最常見的SQL連接類型。
INNER JOIN是最常用的SQL連接。你只會取得兩個表格中「同時存在」的資料。換句話說,只有當兩個表格的連接欄位都有對應資料時,查詢結果才會顯示這一筆資料。
LEFT JOIN會保留左邊表格的所有資料。即使右邊表格沒有對應資料,左邊的資料也會出現在查詢結果中。右邊沒有對應時,欄位會顯示NULL。
RIGHT JOIN和LEFT JOIN相反。你會保留右邊表格的所有資料。左邊沒有對應時,左邊的欄位會顯示NULL。
FULL JOIN會保留左右兩邊表格的所有資料。只要任一邊有資料,查詢結果都會顯示。沒有對應的部分會顯示NULL。注意:MySQL原生不支援FULL JOIN,你可以用UNION來模擬。
CROSS JOIN會產生兩個表格所有資料的組合。你會得到「笛卡兒積」,也就是每一筆左表資料都會和右表每一筆資料配對。這種SQL連接很少用在實務查詢,通常用來產生所有可能的組合。
小提醒:你在選擇SQL連接類型時,要根據查詢需求決定資料保留範圍。
JOIN類型 | 查詢結果資料來源說明 | MySQL支援狀況 |
---|---|---|
INNER JOIN | 兩表皆有對應才顯示 | ✅ |
LEFT JOIN | 保留左表全部,右表無對應為NULL | ✅ |
RIGHT JOIN | 保留右表全部,左表無對應為NULL | ✅ |
FULL JOIN | 兩表全部,無對應為NULL | ❌(需UNION) |
CROSS JOIN | 兩表所有組合 | ✅ |
你只要掌握這些SQL連接類型,就能靈活處理多表查詢,讓資料整合更有效率。
你在寫SQL連接時,最常見的語法結構如下:
SELECT 欄位名稱
FROM 表格A
JOIN 表格B
ON 表格A.欄位 = 表格B.欄位;
這裡有幾個重要的部分:
SELECT
:你要查詢哪些欄位。FROM
:指定主要的資料表。JOIN
:選擇要連接的資料表,可以是INNER JOIN、LEFT JOIN等。ON
:設定連接條件,告訴資料庫要用哪個欄位來做配對。小提醒:你可以根據需求選擇不同的JOIN類型,讓SQL連接查詢結果更符合你的目標。
你在設定連接條件時,通常會用兩個表格的共同欄位。這些欄位常常是主鍵(Primary Key)和外鍵(Foreign Key)。主鍵在一個表格中是唯一的,外鍵則用來對應另一個表格的主鍵。
舉例來說:
SELECT 學生.姓名, 成績.分數
FROM 學生
INNER JOIN 成績
ON 學生.學生ID = 成績.學生ID;
這裡你用學生ID來連接兩個表格。這樣可以確保每個學生的資料正確對應到成績。
當你查詢的表格有相同欄位名稱時,記得加上表名或別名,避免混淆。你可以這樣寫:
SELECT A.姓名, B.分數
FROM 學生 AS A
JOIN 成績 AS B
ON A.學生ID = B.學生ID;
這樣你就能清楚知道每個欄位來自哪個表格。這個習慣能讓你的SQL連接更安全,也更容易維護。
你在寫JOIN時,最容易犯的錯誤就是忘記設定連接條件。當你沒有在ON
後面指定正確的欄位,資料庫會把兩個表格的所有資料組合起來,產生大量重複資料。這種情況叫做「笛卡兒積」,查詢結果會比你預期的多出很多行。
小提醒:每次寫JOIN語法時,請檢查
ON
後面是否有正確的連接條件。這樣可以避免資料錯誤或查詢效能變差。
你在使用LEFT JOIN、RIGHT JOIN或FULL JOIN時,經常會看到查詢結果出現NULL。這代表某一邊的表格沒有對應資料。例如,LEFT JOIN會保留左表所有資料,右表沒有對應時,右表欄位就會顯示NULL。
注意:你在分析查詢結果時,看到NULL就要知道這是沒有對應資料的訊號。
你常常會把WHERE條件和JOIN條件混在一起。正確做法是:用ON
來設定表格之間的連接條件,用WHERE
來篩選查詢結果。例如:
SELECT *
FROM 學生
LEFT JOIN 成績 ON 學生.學生ID = 成績.學生ID
WHERE 成績.分數 > 60;
這樣寫會只顯示分數大於60的學生,但如果成績表沒有對應資料,這些學生會被排除。你如果想保留所有學生,應該把條件寫在ON
後面。
建議:先用
ON
連接表格,再用WHERE
做資料篩選。這樣可以避免漏掉你想查的資料。
你已經學會SQL JOIN的基本觀念與常見用法。選擇正確的JOIN類型,能讓你查詢多表資料時更有效率。
多練習不同JOIN語法,遇到問題時記得檢查條件設定。
JOIN是資料庫查詢的核心技能。你只要熟練這些技巧,就能大幅提升資料處理能力!
你用JOIN可以同時查多個表格。子查詢則是先查一個表,再用結果查另一個表。JOIN通常查詢速度較快。
你想保留左表所有資料時,請用LEFT JOIN。即使右表沒有對應資料,左表的資料也會顯示。
你可以在一個SQL語句中連接多個表格。只要每個JOIN後面加上正確的連接條件即可。
你可以檢查索引是否有設好。加上索引可以讓JOIN查詢更快。也可以只查需要的欄位。
你想產生所有可能的組合時,可以用CROSS JOIN。例如:你要列出所有商品和所有顏色的搭配。
免費資源下載