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

MySQL JOIN 關聯查詢完整教學:從建表到實戰演練

     編輯:MySQL 資料庫相關知識

前言

在關聯式資料庫中,JOIN(聯結)是將多張資料表依據關聯欄位結合查詢的核心技術。掌握各類 JOIN 的語法與適用場景,能大幅提升 SQL 查詢效率與靈活度。本文將以 MySQL 為例,從建立測試資料表、插入樣本資料開始,逐步講解 INNER JOIN、LEFT JOIN、RIGHT JOIN 等常見聯結方式的實戰用法。

一、建立測試資料表

首先建立兩張表:emp(員工基本資料)與 emp_dept(員工部門對應)。

CREATE TABLE emp (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(10)
);

CREATE TABLE emp_dept (
    dept_id VARCHAR(4) NOT NULL,
    emp_id INT NOT NULL,
    emp_name VARCHAR(10),
    PRIMARY KEY (dept_id, emp_id)
);

二、插入測試資料

向 emp 表插入 10 筆員工資料:

INSERT INTO emp VALUES
(1, 'Dennis-1'), (2, 'Dennis-2'), (3, 'Dennis-3'),
(4, 'Dennis-4'), (5, 'Dennis-5'), (6, 'Dennis-6'),
(7, 'Dennis-7'), (8, 'Dennis-8'), (9, 'Dennis-9'),
(10, 'Dennis-10');

向 emp_dept 表插入 5 筆部門對應資料(注意:僅有前 5 號員工有部門記錄):

INSERT INTO emp_dept VALUES
('R&D', 1, 'Dennis-1'),
('DEv', 2, 'Dennis-2'),
('R&D', 3, 'Dennis-3'),
('Test', 4, 'Dennis-4'),
('Test', 5, 'Dennis-5');

三、常見 JOIN 類型實戰

1. INNER JOIN(內聯結)

只返回兩張表中同時符合關聯條件的記錄。

SELECT e.id, e.name, d.dept_id
FROM emp e
INNER JOIN emp_dept d ON e.id = d.emp_id;

結果:僅顯示 id 1~5 的員工及其部門。

2. LEFT JOIN(左聯結)

以左表(emp)為基準,返回左表所有記錄,右表無匹配則顯示 NULL。

SELECT e.id, e.name, d.dept_id
FROM emp e
LEFT JOIN emp_dept d ON e.id = d.emp_id;

結果:10 筆員工全顯示,id 6~10 的 dept_id 為 NULL。

3. RIGHT JOIN(右聯結)

以右表(emp_dept)為基準,返回右表所有記錄,左表無匹配則顯示 NULL(本例中右表所有記錄皆有對應左表)。

SELECT e.id, e.name, d.dept_id
FROM emp e
RIGHT JOIN emp_dept d ON e.id = d.emp_id;

四、進階技巧:多表聯結與條件過濾

實務上常需結合 WHERE、GROUP BY 等子句。例如查詢「R&D 部門員工姓名」:

SELECT e.name
FROM emp e
INNER JOIN emp_dept d ON e.id = d.emp_id
WHERE d.dept_id = 'R&D';

五、效能優化建議

  • 關聯欄位(如 emp.id、emp_dept.emp_id)務必建立索引。
  • 優先使用 INNER JOIN,資料量較小時效能最佳。
  • 避免在 ON 條件中使用函數或運算,導致索引失效。
  • 大表聯結時,考慮先用子查詢或臨時表縮小資料集。

六、總結

透過本文的完整範例,您已掌握 MySQL JOIN 的核心語法與實戰應用。建立測試環境、插入樣本資料、逐步驗證各類聯結結果,是學習 SQL 聯結查詢最扎實的路徑。下一步可嘗試更複雜的多表聯結、子查詢優化與 EXPLAIN 執行計劃分析,進一步提升資料庫開發能力。

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