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

MySQL 入門實戰(五):多表關聯查詢核心技法

     編輯:MySQL 資料庫相關知識

真實業務中,資料常分散在多張關聯表中。本文透過「員工基本資料表」與「文章發表記錄表」的經典案例,詳細講解多表查詢的寫法與注意事項。

場景準備:兩張表

1. 員工表 mytable

+----------+------+------------+-----------+
| name     | sex  | birth      | birthaddr |
+----------+------+------------+-----------+
| abccs    | f    | 1977-07-07 | china     |
| mary     | f    | 1978-12-12 | usa       |
| tom      | m    | 1970-09-02 | usa       |
+----------+------+------------+-----------+

2. 文章表 title

CREATE TABLE title (
    writer VARCHAR(20) NOT NULL,
    title  VARCHAR(40) NOT NULL,
    senddate DATE
);
+--------+-------+------------+
| writer | title | senddate   |
+--------+-------+------------+
| abccs  | a1    | 2000-01-23 |
| mary   | b1    | 1998-03-21 |
| abccs  | a2    | 2000-12-04 |
| tom    | c1    | 1992-05-16 |
| tom    | c2    | 1999-12-12 |
+--------+-------+------------+

核心語法:隱性內連結(舊式寫法)

在 FROM 列出多張表,WHERE 指定關聯條件:

-- 查詢 abccs 的姓名、性別、文章標題
SELECT name, sex, title 
FROM mytable, title 
WHERE name = writer AND name = 'abccs';

結果:

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

進階範例:反向查詢

找出文章 a2 的作者出生地與生日:

SELECT title, writer, birthaddr, birth
FROM mytable, title
WHERE mytable.name = title.writer AND title = 'a2';

關鍵注意事項

  1. 欄位限定名:若兩表有同名欄位(如皆為 name),必須寫成 mytable.name、title.name 區分,否則報錯。
  2. 關聯條件不可少:缺少 WHERE 關聯條件會產生笛卡兒積,資料量暴增導致效能災難。
  3. 建議改用 ANSI JOIN:現代寫法請使用 INNER JOIN ... ON ...,語義更清晰、易維護。

現代寫法對照

-- 內連結(推薦)
SELECT m.name, m.sex, t.title
FROM mytable m
INNER JOIN title t ON m.name = t.writer
WHERE m.name = 'abccs';
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved