萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL LEFT JOIN 左連接完整教學與實戰範例

什麼是 LEFT JOIN?

在關聯式資料庫操作中,LEFT JOIN(左連接) 是最常用的連接類型之一。它的核心特性是:保留左側資料表的所有記錄,即使右側資料表沒有符合條件的匹配行,左側的資料依然會出現在結果集中,右側缺失的欄位會以 NULL 填充。

語法結構

SELECT 左表.欄位, 右表.欄位
FROM 左表
LEFT JOIN 右表 ON 左表.關聯欄位 = 右表.關聯欄位;

實戰範例:家庭成員與餐點偏好

假設我們有兩張表:family(家庭成員)與 food(餐點偏好)。

資料表結構

family 表food 表
Position | Age
Dad      | 41
Mom      | 45
Daughter | 17
Dog      | (無年齡)
Meal       | Position
Steak      | Dad
Salad      | Mom
Spinach Soup| (無對應)
Tacos      | Dad

一般 INNER JOIN(內連接)結果

SELECT food.Meal, family.Position
FROM family, food
WHERE food.Position = family.Position;

輸出:

Dad - Steak
Mom - Salad
Dad - Tacos

注意:Daughter 和 Dog 因無對應餐點被排除。

使用 LEFT JOIN 的結果

SELECT family.Position, food.Meal
FROM family
LEFT JOIN food ON family.Position = food.Position;

輸出:

Dad - Steak
Dad - Tacos
Mom - Salad
Daughter - NULL
Dog - NULL

所有家庭成員都被保留,無匹配餐點者顯示 NULL。

PHP 程式碼範例

$query = "SELECT family.Position, food.Meal "
       . "FROM family "
       . "LEFT JOIN food ON family.Position = food.Position";

$result = mysqli_query($conn, $query) or die(mysqli_error($conn));

while ($row = mysqli_fetch_assoc($result)) {
    echo $row['Position'] . " - " . ($row['Meal'] ?? 'NULL') . "
"; }

關鍵差異總結

  • INNER JOIN:僅返回雙方都有匹配的行
  • LEFT JOIN:返回左表所有行 + 右表匹配行(無匹配則為 NULL)
  • RIGHT JOIN:返回右表所有行 + 左表匹配行

適用場景

  • 主表資料不可遺失(如:所有用戶、所有商品)
  • 需統計關聯資料但允許無關聯(如:用戶訂單統計、商品評論數)
  • 資料完整性檢查(找出孤兒記錄)

掌握 LEFT JOIN 讓你在多表查詢中遊刃有餘,是 SQL 進階的必修課!

copyright © 萬盛學電腦網 all rights reserved