MySQL 教材:有條件接合 |
根據前一節的範例,我們明白
select name, addr, ADDR.id, zip, streetno from LIST join ADDR;應該獲得以下 12 筆資料
這個結果雖然符合數學定義,但是實在很難想像,究竟有什麼意義? 因此,實際上,很少有人需要整個接合的表格,而是要在接合後的表格中, 取得需要的幾筆資料。因此,就需要 where 子句,從這個接合的表格中, 抽取需要的資料。+--------+------+----+------+--------------------------------+ | name | addr | id | zip | streetno | +--------+------+----+------+--------------------------------+ | 郭靖 | 1 | 1 | 5 | 忠孝東路四段 18 巷 5-1 號 9 樓 | | 黃蓉 | 1 | 1 | 5 | 忠孝東路四段 18 巷 5-1 號 9 樓 | | 周伯通 | 2 | 1 | 5 | 忠孝東路四段 18 巷 5-1 號 9 樓 | | 歐陽鋒 | 3 | 1 | 5 | 忠孝東路四段 18 巷 5-1 號 9 樓 | | 郭靖 | 1 | 2 | 339 | 府前路 218 號 | | 黃蓉 | 1 | 2 | 339 | 府前路 218 號 | | 周伯通 | 2 | 2 | 339 | 府前路 218 號 | | 歐陽鋒 | 3 | 2 | 339 | 府前路 218 號 | | 郭靖 | 1 | 3 | 75 | 月眉里 9 鄰 103 號 | | 黃蓉 | 1 | 3 | 75 | 月眉里 9 鄰 103 號 | | 周伯通 | 2 | 3 | 75 | 月眉里 9 鄰 103 號 | | 歐陽鋒 | 3 | 3 | 75 | 月眉里 9 鄰 103 號 | +--------+------+----+------+--------------------------------+
例如我們想要列出 LIST 表格中每個人的地址,可以這樣做
select name, zip, streetno from LIST join ADDR where LIST.addr = ADDR.id;MySQL 的工作程序如下:
+--------+------+--------------------------------+ | name | zip | streetno | +--------+------+--------------------------------+ | 郭靖 | 5 | 忠孝東路四段 18 巷 5-1 號 9 樓 | | 黃蓉 | 5 | 忠孝東路四段 18 巷 5-1 號 9 樓 | | 周伯通 | 339 | 府前路 218 號 | | 歐陽鋒 | 75 | 月眉里 9 鄰 103 號 | +--------+------+--------------------------------+
但是,我們還不滿意,因為 ADDR 中的 zip 欄位,並不是真的郵遞區號, 也沒有寫出郵遞區域的地址,它其實是指 ZIP 表格中的第幾筆資料。 因此,我們其實需要接合 LIST, ADDR, ZIP 三張表格, 搜尋 LIST.addr = ADDR.id 而且 ADDR.zip = ZIP.id 的資料, 並且列印我們需要的資訊:姓名、郵遞區號、縣市、地區、街道地址。 指令應該是
select name, ZIP.zip, zone, area, streetno如我們所料,得到結果
from LIST join ADDR join ZIP
where LIST.addr = ADDR.id and ADDR.zip = ZIP.id;
+--------+------+--------+--------+--------------------------------+ | name | zip | zone | area | streetno | +--------+------+--------+--------+--------------------------------+ | 郭靖 | 106 | 臺北市 | 大安區 | 忠孝東路四段 18 巷 5-1 號 9 樓 | | 黃蓉 | 106 | 臺北市 | 大安區 | 忠孝東路四段 18 巷 5-1 號 9 樓 | | 周伯通 | 970 | 花蓮縣 | 花蓮 | 府前路 218 號 | | 歐陽鋒 | 320 | 桃園縣 | 中壢 | 月眉里 9 鄰 103 號 | +--------+------+--------+--------+--------------------------------+
習題