萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 多表關聯管理:外鍵、級聯、連接查詢完整教學

1. 外鍵約束

外鍵是副表中引用主表主鍵的欄位。例如:學生表 classid 參考班級表 cid。

-- 主表
CREATE TABLE class (
  cid INT PRIMARY KEY,
  ccount INT
);

-- 副表(含外鍵)
CREATE TABLE student (
  sid INT PRIMARY KEY,
  sname VARCHAR(20),
  sex VARCHAR(4),
  classid INT,
  CONSTRAINT student_class_fk FOREIGN KEY (classid) REFERENCES class(cid)
);

作用: 副表插入資料時外鍵值必須存在於主表;刪除主表資料前需先處理副表關聯資料。

2. 級聯操作

-- 級聯更新:主表主鍵變更,副表外鍵自動同步
CONSTRAINT student_class_fk FOREIGN KEY (classid) REFERENCES class(cid) ON UPDATE CASCADE

-- 級聯刪除:刪除主表資料,副表關聯資料自動刪除
CONSTRAINT student_class_fk FOREIGN KEY (classid) REFERENCES class(cid) ON DELETE CASCADE

3. 多表查詢類型

3.1 交叉查詢 (CROSS JOIN)

產生笛卡爾積(表1行數 × 表2行數),通常非預期結果。

SELECT sid, cid FROM student, class;

3.2 內連接 (INNER JOIN) — 最常用

僅返回符合條件的匹配行(不含 NULL)。

-- 隱式內連接
SELECT s.sname, c.ccount
FROM student s, class c
WHERE s.classid = c.cid;

-- 顯式內連接(推薦)
SELECT s.sname, c.ccount
FROM student s
INNER JOIN class c ON s.classid = c.cid;

3.3 左外連接 (LEFT JOIN)

以左表為基準,右表無匹配顯示 NULL。

SELECT s.sname, c.cid
FROM student s
LEFT JOIN class c ON s.classid = c.cid;

3.4 右外連接 (RIGHT JOIN)

以右表為基準,左表無匹配顯示 NULL。

SELECT s.sname, c.cid
FROM class c
RIGHT JOIN student s ON s.classid = c.cid;

3.5 自連接 (Self Join)

同一張表用別名關聯自身,如員工表查詢上下級關係。

SELECT e.ename AS 員工, b.ename AS 上司
FROM employee e
LEFT JOIN employee b ON e.bossId = b.eid;

多表查詢三步驟思維

  1. 確定涉及哪些表
  2. 確定需要查詢哪些欄位
  3. 確定表間關聯條件(N張表需 N-1 個條件)
copyright © 萬盛學電腦網 all rights reserved