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

MySQL 入門教學(五):多表關聯查詢與 JOIN 操作

     編輯:MySQL 資料庫相關知識

情境準備

建立兩張關聯表:員工基本資料表 mytable 與文章發表記錄表 title。

-- 員工表
CREATE TABLE mytable (
  name VARCHAR(20),
  sex CHAR(1),
  birth DATE,
  birthaddr VARCHAR(20)
);

-- 文章表
CREATE TABLE title (
  writer VARCHAR(20) NOT NULL,
  title VARCHAR(40) NOT NULL,
  senddate DATE
);

多表查詢核心:JOIN

當資料分散在多張表,需透過共同欄位(外鍵關聯)進行組合查詢。MySQL 支援多種 JOIN 型態:

內部連結 - 只有雙方都符合條件的資料

-- 查詢 abccs 的姓名、性別與文章標題
SELECT m.name, m.sex, t.title
FROM mytable m
INNER JOIN title t ON m.name = t.writer
WHERE m.name = 'abccs';

結果:

+-------+------+-------+
| name  | sex  | title |
+-------+------+-------+
| abccs | f    | a1    |
| abccs | f    | a2    |
+-------+------+-------+

左側連結 - 以左表為主,右表無對應則為 NULL

SELECT m.name, m.sex, t.title
FROM mytable m
LEFT JOIN title t ON m.name = t.writer;

右側連結 - 以右表為主

SELECT m.name, m.sex, t.title
FROM mytable m
RIGHT JOIN title t ON m.name = t.writer;

進階範例:反向查詢

查詢文章 a2 的作者、出生地與出生日期:

SELECT t.title, t.writer, m.birthaddr, m.birth
FROM mytable m
INNER JOIN title t ON m.name = t.writer
WHERE t.title = 'a2';

關鍵注意事項

  • 關聯欄位名稱不同時,需明確指定 表別名.欄位名 避免歧義
  • 大量資料查詢務必在關聯欄位建立索引
  • 避免使用舊式逗號連結語法(FROM a,b WHERE...),改用標準 JOIN 語法
  • 使用 EXPLAIN 分析執行計畫,確認是否走索引

實務延伸

實際專案中常見多表關聯場景:

  • 訂單-訂單明細-商品(一對多、多對多)
  • 用戶-角色-權限(RBAC 模型)
  • 部門-員工-考勤(層級關聯)

掌握 JOIN 操作是 SQL 進階的關鍵門檻,建議大量練習各類關聯查詢場景。

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