MySQL 教材:接合

如課本中所述,若將表格視為有序對所成的集合, 則兩個表格的接合,就是兩個集合的直積。 我們假設讀者已經按照 輸入資料、查閱表格 這一節的指示,做好了 ADDR 表格, 也按照 在表格中增加欄位改變表格的名字 的指示,做好了 LIST 表格, 而且這兩個表格如課本所示。 那麼,將 LIST 和 ADDR 接合的指令就是

LIST join ADDR
用以下指令看看接合之後的結果:
select * from LIST join ADDR;
觀察

如果不想看到這麼多欄位,可以選擇列印某些接合後的表格欄位。 如果某個欄位名稱是兩個表格中獨有的,就直接說名稱; 如果某個欄位名稱是兩個表格中共有的,就要以 table.field 的形式來指明。 例如

select LIST.id, name, gender, ADDR.id, zip, streetno from LIST join ADDR;
看到以下 12 筆資料
+----+--------+--------+----+------+--------------------------------+
| id | name   | gender | id | zip  | streetno                       |
+----+--------+--------+----+------+--------------------------------+
|  1 | 郭靖   | M      |  1 |    5 | 忠孝東路四段 18 巷 5-1 號 9 樓 |
|  2 | 黃蓉   | F      |  1 |    5 | 忠孝東路四段 18 巷 5-1 號 9 樓 |
|  3 | 周伯通 | M      |  1 |    5 | 忠孝東路四段 18 巷 5-1 號 9 樓 |
|  4 | 歐陽鋒 | M      |  1 |    5 | 忠孝東路四段 18 巷 5-1 號 9 樓 |
|  1 | 郭靖   | M      |  2 |  339 | 府前路 218 號                  |
|  2 | 黃蓉   | F      |  2 |  339 | 府前路 218 號                  |
|  3 | 周伯通 | M      |  2 |  339 | 府前路 218 號                  |
|  4 | 歐陽鋒 | M      |  2 |  339 | 府前路 218 號                  |
|  1 | 郭靖   | M      |  3 |   75 | 月眉里 9 鄰 103 號             |
|  2 | 黃蓉   | F      |  3 |   75 | 月眉里 9 鄰 103 號             |
|  3 | 周伯通 | M      |  3 |   75 | 月眉里 9 鄰 103 號             |
|  4 | 歐陽鋒 | M      |  3 |   75 | 月眉里 9 鄰 103 號             |
+----+--------+--------+----+------+--------------------------------+
這個結果雖然符合接合的數學定義,但是實在很難想像,究竟有什麼意義。

MySQL 其實接受一個逗點代表 join。所以,上述指令等同於

select LIST.id, name, gender, ADDR.id, zip, streetno from LIST, ADDR;
三張以上的表格也可以接合,語法就是 A join B join C。 按照數學的結合律,其效果也就類似 (A join B) join C。

習題

  1. 若將 LIST 與 ADDR 與 ZIP 接合起來,則應該總共有幾筆資料? 幾個欄位?
  2. 將 LIST 與 ADDR 與 ZIP 三張表格接合起來,並且印出所有欄位資料。
  3. 將 LIST 與 ADDR 與 ZIP 三張表格接合起來,並且只印出三個表格的 id 欄。
[BCC16-A]
單維彰 (01/05/31) ---
[Prev] [Next] [Up]