在關聯式資料庫中,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');
只返回兩張表中同時符合關聯條件的記錄。
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 的員工及其部門。
以左表(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。
以右表(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';
透過本文的完整範例,您已掌握 MySQL JOIN 的核心語法與實戰應用。建立測試環境、插入樣本資料、逐步驗證各類聯結結果,是學習 SQL 聯結查詢最扎實的路徑。下一步可嘗試更複雜的多表聯結、子查詢優化與 EXPLAIN 執行計劃分析,進一步提升資料庫開發能力。