萬盛學電腦網

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

MySQL 多表聯合查詢全解析:INNER/LEFT/RIGHT JOIN 語法與巢狀連接實戰

三種核心 JOIN 類型

類型別名結果集包含適用場景
INNER JOIN等值連接兩表關聯欄位都匹配的行只需雙方都存在的資料(如訂單+用戶)
LEFT JOIN左連接左表所有行 + 右表匹配行(無匹配則 NULL)主表為主,附帶從屬資訊(如用戶+最後登入)
RIGHT JOIN右連接右表所有行 + 左表匹配行較少用,可改寫為 LEFT JOIN 交換表順序

語法模板

-- 兩表
SELECT select_list
FROM table1
INNER JOIN table2 ON table1.common_col = table2.common_col;

-- 三表(需括號嵌套)
SELECT select_list
FROM (table1
INNER JOIN table2 ON table1.col = table2.col)
INNER JOIN table3 ON table1.col = table3.col;

-- N 表:持續在外層包裹括號並追加 JOIN

實戰範例:作者-作品-類型三表查詢

SELECT 
    u.uid,
    u.werkxurhadrd_kurzname,
    w.d_WerksArt
FROM tx_txurheber_urheber AS u
INNER JOIN tx_vda_werke AS w 
    ON u.fk_werk = w._pk_Werk
    AND w.d_WerksArt = 'Theater'
LIMIT 30;

多表連接擴展模式(最多 61 表)

-- 4 表
SELECT * FROM ((t1 JOIN t2 ON t1.id=t2.id) JOIN t3 ON t1.id=t3.id) JOIN t4 ON t1.id=t4.id;

-- 5 表
SELECT * FROM (((t1 JOIN t2 ON t1.id=t2.id) JOIN t3 ON t1.id=t3.id) JOIN t4 ON t1.id=t4.id) JOIN t5 ON t1.id=t5.id;

-- 規律:每新增一表,在最外層包一層括號,再接 JOIN 新表 ON 條件

關鍵注意事項

💡 開發規範

  1. 半角符號:所有標點、空格必須為英文半角
  2. 關聯欄位型別一致:主表若為 BIGINT,從表外鍵也必須是 BIGINT
  3. 主鍵/唯一索引:被關聯欄位最好有主鍵或唯一索引,確保 1:N 語義清晰
  4. 避免 SELECT *:明確列出需要欄位,減少網路傳輸與緩存壓力
  5. 別名簡寫:FROM long_table_name AS ltn 提升可讀性

效能優化建議

  • 驅動表優先:小結果集表放在 LEFT JOIN 左側或 INNER JOIN 最初
  • 索引覆蓋:ON 條件欄位、WHERE 過濾欄位、SELECT 目標欄位組成複合索引
  • 衍生表優化:MySQL 8.0+ 會自動合併衍生表,舊版本考慮手動改寫
  • 避免笛卡兒積:確保每個 JOIN 都有 ON 條件

對比:隱式連接 vs 顯式 JOIN

-- ❌ 舊式隱式連接(不推薦)
SELECT * FROM a, b, c WHERE a.id=b.id AND b.id=c.id;

-- ✅ 現代顯式 JOIN(推薦)
SELECT * FROM a
JOIN b ON a.id=b.id
JOIN c ON b.id=c.id;

顯式 JOIN 優勢:語義清晰、易維護、支援 OUTER JOIN、優化器更智能。

copyright © 萬盛學電腦網 all rights reserved