現實世界的資料庫系統中,資料通常分散在多個相關聯的資料表中。本篇將介紹如何操作多個資料表,並透過關聯查詢(JOIN)從不同表格中組合所需資訊。
承接上一篇的 mytable(員工基本資料),我們新建一張 title 表,記錄員工發表的文章資訊:
CREATE TABLE title (
writer VARCHAR(20) NOT NULL,
title VARCHAR(40) NOT NULL,
senddate DATE
);
插入測試資料後,title 表內容如下:
| 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 |
由於資料分散在 mytable 與 title 兩張表,查詢時必須指定兩表如何對應。關鍵在於 WHERE 子句中設定關聯鍵:
SELECT 欄位清單 FROM 表1, 表2 WHERE 表1.關聯欄位 = 表2.關聯欄位;
SELECT name, sex, title FROM mytable, title WHERE name = writer AND name = 'abccs';
結果:
| name | sex | title |
|---|---|---|
| abccs | f | a1 |
| abccs | f | a2 |
SELECT title, writer, birthaddr, birth FROM mytable, title WHERE mytable.name = title.writer AND title = 'a2';
結果:
| title | writer | birthaddr | birth |
|---|---|---|---|
| a2 | abccs | china | 1977-07-07 |
若兩張表擁有相同名稱的欄位(例如都叫 name),必須使用 資料表名.欄位名 的完整格式加以區分,否則會發生「欄位不明確」的錯誤。
多表查詢的核心在於「找出關聯鍵」並「在 WHERE 條件中指定等值連接」。這是關聯式資料庫最基本也最重要的操作之一。下一篇將介紹資料表結構修改、資料異動與備份還原等維護操作。