首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 連接查詢大全:內連接、外連接、自然連接與直連語法

     編輯:MySQL 資料庫相關知識

多表關聯查詢的核心語法與執行邏輯

連接查詢是關聯式資料庫的核心。MySQL 支援 `CROSS JOIN`、`INNER JOIN`、`OUTER JOIN` 等多種模式,理解其邏輯執行順序(笛卡爾積 → ON 過濾 → 加外部行)是寫出高效 SQL 的關鍵。

連接類型對比

類型關鍵字執行步驟結果特徵
交叉連接CROSS JOIN僅步驟1笛卡爾積 M×N 行
內連接INNER JOIN / JOIN步驟1+2僅匹配行
左外連接LEFT [OUTER] JOIN步驟1+2+3左表全保留,右表無匹配填 NULL
右外連接RIGHT [OUTER] JOIN步驟1+2+3右表全保留,左表無匹配填 NULL

語法簡寫

  • `USING(col)`:當連接欄位同名時替代 `ON t1.col = t2.col`。
  • `NATURAL JOIN`:自動匹配所有同名欄位,等同 `INNER JOIN ... USING(共同欄位)`。
  • `STRAIGHT_JOIN`:強制優化器按書寫順序讀表(左表優先),用於優化器選錯驅動表時的干預。

實戰範例

-- 1. CROSS JOIN 產生測試資料
SELECT * FROM t1 CROSS JOIN t2;

-- 2. 內連接查詢有訂單的用戶
SELECT u.name, o.order_id FROM users u INNER JOIN orders o ON u.id = o.user_id;
-- 等價簡寫
SELECT u.name, o.order_id FROM users u JOIN orders o USING(user_id);

-- 3. 左外連接查詢所有用戶及其訂單 (無訂單也顯示)
SELECT u.name, o.order_id FROM users u LEFT JOIN orders o USING(user_id);

-- 4. 自然連接 (自動匹配同名欄位)
SELECT * FROM users NATURAL LEFT JOIN orders;

-- 5. STRAIGHT_JOIN 強制順序
EXPLAIN SELECT * FROM t1 STRAIGHT_JOIN t2 ON t1.id = t2.id; -- 強制先讀 t1

多表連接注意事項

  • 內連接多表: 順序不影響結果,優化器自動選擇最優驅動表。
  • 外連接多表: 表順序影響外部行保留邏輯,需謹慎安排。
  • 避免混用逗號舊語法 (`FROM a, b WHERE ...`) 與標準 `JOIN` 混寫,優先級不同易出錯。

效能提示

  1. 驅動表(外層循環)應為結果集較小的表。
  2. 被驅動表連接欄位必須有索引。
  3. 使用 `EXPLAIN` 觀察 `type`、`rows`、`Extra` (Using join buffer 等)。
  4. 大表關聯考慮 `Hash Join` (MySQL 8.0.18+) 或應用層分批處理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved