首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 多表聯接查詢全攻略:CROSS/INNER/OUTER JOIN 實戰詳解

     編輯:MySQL 綜合教學

MySQL 多表聯接查詢全攻略:CROSS/INNER/OUTER JOIN 實戰詳解

現代業務系統中,資料分散於多張表,透過主鍵/外鍵關聯。掌握各類 JOIN 操作,是高效查詢的關鍵。本文系統總結 MySQL 支援的聯接類型與實戰技巧。

聯接查詢的邏輯執行順序

每次聯接僅發生在兩張表之間,遵循三步邏輯:

  1. 執行 FROM 子句(產生笛卡爾積)
  2. 執行 ON 過濾條件
  3. 添加外部行(僅 OUTER JOIN)

多表聯接時,每次產生一個虛擬表,再與下一張表重複上述步驟。

前置測試資料準備

CREATE DATABASE TestDB;
USE TestDB;

CREATE TABLE table1 (
  customer_id VARCHAR(10) NOT NULL,
  city VARCHAR(10) NOT NULL,
  PRIMARY KEY(customer_id)
) ENGINE=INNODB DEFAULT CHARSET=UTF8;

CREATE TABLE table2 (
  order_id INT NOT NULL AUTO_INCREMENT,
  customer_id VARCHAR(10),
  PRIMARY KEY(order_id)
) ENGINE=INNODB DEFAULT CHARSET=UTF8;

INSERT INTO table1 VALUES ('163','hangzhou'),('9you','shanghai'),('tx','hangzhou'),('baidu','hangzhou');
INSERT INTO table2 (customer_id) VALUES ('163'),('163'),('9you'),('9you'),('9you'),('tx');

CROSS JOIN(交叉聯接)

執行笛卡爾積,左表 m 行 × 右表 n 行 = m×n 行結果。無 ON 條件,常用於生成大量測試資料。

SELECT * FROM table1 CROSS JOIN table2;

INNER JOIN(內聯接)

依據 ON/USING 條件匹配,僅返回符合條件的行。執行前兩步邏輯,不添加外部行。可省略 INNER 關鍵字,直接用 JOIN。

SELECT * FROM table1 INNER JOIN table2 ON table1.customer_id = table2.customer_id;
-- 簡寫:同名欄位可用 USING
SELECT * FROM table1 JOIN table2 USING (customer_id);

OUTER JOIN(外聯接)

結果 = INNER JOIN 結果 + 外部行。必須指定 ON/USING。MySQL 支援 LEFT/RIGHT OUTER JOIN,可省略 OUTER。

SELECT * FROM table1 LEFT JOIN table2 USING (customer_id);
SELECT * FROM table1 RIGHT JOIN table2 USING (customer_id);

NATURAL JOIN(自然連接)

等同於 INNER/OUTER JOIN + USING,自動匹配同名欄位。

SELECT * FROM table1 NATURAL JOIN table2;
SELECT * FROM table1 NATURAL LEFT JOIN table2;

STRAIGHT_JOIN(強制連接順序)

非新聯接類型,而是強制優化器先讀取左表。適合大表驅動小表或已知最佳訪問順序時優化效能。

EXPLAIN SELECT * FROM table1 STRAIGHT_JOIN table2 ON table1.customer_id = table2.customer_id;

多表聯接注意事項

  • INNER JOIN 多表:順序不影響結果,優化器自動選擇最優路徑;需指定順序可用 STRAIGHT_JOIN。
  • OUTER JOIN 多表:表位置影響外部行添加,順序不同可能導致結果差異。

總結

熟練掌握各類 JOIN 的語義、執行邏輯與適用場景,配合 EXPLAIN 分析執行計畫,能寫出高效、可維護的多表查詢。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved