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

MySQL 入門實戰:建表、插入資料與 LEFT/RIGHT/INNER JOIN 完整圖解

     編輯:MySQL 資料庫相關知識

建立範例表

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)
);

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');

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 類型圖解

LEFT JOIN:以左表為基準

SELECT a.id, a.name, b.dept_id
FROM emp a LEFT JOIN emp_dept b ON a.id = b.emp_id;

結果:emp 全部 10 列,emp_dept 無對應者顯示 NULL

idnamedept_id
1Dennis-1R&D
2Dennis-2Dev
3Dennis-3R&D
4Dennis-4Test
5Dennis-5Test
6Dennis-6NULL
7Dennis-7NULL
8Dennis-8NULL
9Dennis-9NULL
10Dennis-10NULL

查詢「只有左表有」的資料

SELECT a.id, a.name, b.dept_id
FROM emp a LEFT JOIN emp_dept b ON a.id = b.emp_id
WHERE b.dept_id IS NULL;

RIGHT JOIN:以右表為基準

SELECT a.id, a.name, b.dept_id
FROM emp a RIGHT JOIN emp_dept b ON a.id = b.emp_id;

結果:emp_dept 5 列,emp 無對應者不顯示(此例無此情況)

交換表順序 + RIGHT JOIN = LEFT JOIN

SELECT a.id, a.name, b.dept_id
FROM emp_dept b RIGHT JOIN emp a ON a.id = b.emp_id;

結果與第一個 LEFT JOIN 完全相同。

INNER JOIN(等價舊式 WHERE 寫法)

SELECT a.id, a.name, b.dept_id
FROM emp a INNER JOIN emp_dept b ON a.id = b.emp_id;

-- 舊式寫法
SELECT a.id, a.name, b.dept_id
FROM emp a, emp_dept b
WHERE a.id = b.emp_id;

結果:僅雙方都有的 5 列

記憶口訣

  • LEFT:左表全保留,右表對得上才顯示
  • RIGHT:右表全保留,左表對得上才顯示
  • INNER:雙方都要有,缺一不可
  • 表順序交換 + JOIN 方向反轉 = 結果不變

進階:多表 JOIN 與別名

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

善用別名(e、d、p)簡化 SQL、提升可讀性。

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