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

MySQL SELECT 進階查詢技巧(二):多表連接——全連接與內連接實戰

     編輯:MySQL 綜合教學

多表連接基礎

FROM 子句列出多張表,MySQL 依序產生笛卡兒積(Cross Join),再由 WHERE 過濾有效組合。

建立範例表

CREATE TABLE first (id TINYINT, first_name CHAR(10));
INSERT INTO first VALUES (1,'Tom'),(2,'Marry'),(3,'Jarry');

CREATE TABLE last (id TINYINT, last_name CHAR(10));
INSERT INTO last VALUES (2,'Stone'),(3,'White'),(4,'Donald');

全連接

mysql> SELECT * FROM first, last;
+------+------------+------+-----------+
| id   | first_name | id   | last_name |
+------+------------+------+-----------+
|    1 | Tom        |    2 | Stone     |
|    2 | Marry      |    2 | Stone     |
|    3 | Jarry      |    2 | Stone     |
|    1 | Tom        |    3 | White     |
|    2 | Marry      |    3 | White     |
|    3 | Jarry      |    3 | White     |
|    1 | Tom        |    4 | Donald    |
|    2 | Marry      |    4 | Donald    |
|    3 | Jarry      |    4 | Donald    |
+------+------------+------+-----------+
9 rows in set (3×3=9)
  • 輸出欄位順序依 FROM 表序,不受 SELECT 列順影響。
  • 大表全連接極其危險(百萬行 × 百萬行 = 萬億行),務必加 WHERE 條件限制。

內連接

mysql> SELECT * FROM first, last WHERE first.id = last.id;
+------+------------+------+-----------+
| id   | first_name | id   | last_name |
+------+------------+------+-----------+
|    2 | Marry      |    2 | Stone     |
|    3 | Jarry      |    3 | White     |
+------+------------+------+-----------+

等價於標準 SQL INNER JOIN ... ON first.id = last.id,僅保留符合條件的匹配列。

左連接

mysql> SELECT first.*, last.* FROM first LEFT JOIN last ON first.id = last.id;
+------+------------+------+-----------+
| id   | first_name | id   | last_name |
+------+------------+------+-----------+
|    1 | Tom        | NULL | NULL      |
|    2 | Marry      |    2 | Stone     |
|    3 | Jarry      |    3 | White     |
+------+------------+------+-----------+
  • 左表(first)所有列保留,右表無匹配則填 NULL。
  • 適合「主表帶明細」查詢,如「所有客戶及其訂單(含無訂單客戶)」。

右連接

語法對稱,保留右表所有列。實務上習慣統一用 LEFT JOIN,透過調換表順序達成同等效果。

最佳實務建議

  1. 優先使用明確的 INNER JOIN/LEFT JOIN ... ON 語法,避免舊式逗號連接易漏寫 WHERE 導致全連接災難。
  2. 連接欄位務必建立索引,否則大表連接效能極差。
  3. 僅選取必要欄位(避免 SELECT *),減少網路傳輸與記憶體壓力。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved