SQL表格連接 (Join)


SQL SELECT
SQL DISTINCT
SQL WHERE
SQL AND OR
SQL IN
SQL BETWEEN
SQL LIKE
SQL ORDER BY
SQL 函數
SQL COUNT
SQL GROUP BY
SQL HAVING
SQL 別名
SQL 表格連接
SQL 外部連接
SQL CONCATENATE
SQL SUBSTRING
SQL TRIM



網站導引
其他資源


現在我們介紹連接(join)的概念。要瞭解連接,我們需要用到許多我們之前已介紹過的指令。 我們先假設我們有以下的兩個表格,

Store_Information 表格
store_name Sales Date
Los Angeles $1500 Jan-05-1999
San Diego $250 Jan-07-1999
Los Angeles $300 Jan-08-1999
Boston $700 Jan-08-1999

Geography 表格
region_name store_name
East Boston
East New York
West Los Angeles
West San Diego

而我們要知道每一區 (region_name) 的營業額 (sales)。 Geography 這個表格 告訴我們每一區有哪些店,而 Store_Information 告訴我們每一個店的營業額。 若我們要知道每一區的營業額,我們需要將這兩個不同表格中的資料串聯起來。當我們仔細瞭解這兩個 表格後,我們會發現它們可經由一個相同的欄位,store_name,連接起來。我們先將 SQL 句列出, 之後再討論每一個子句的意義:

SELECT A1.region_name REGION, SUM(A2.Sales) SALES
FROM Geography A1, Store_Information A2
WHERE A1.store_name = A2.store_name
GROUP BY A1.region_name

結果:

REGIONSALES
East$700
West$2050

在第一行中,我們告訴 SQL 去選出兩個欄位:第一個欄位是 Geography 表格中的 region_name 欄位 (我們取了一個別名叫做 REGION);第二個欄位是 Store_Information 表格 中的 sales 欄位 (別名為 SALES)。請注意在這裡我們有用到表格別名:Geography 表格的 別名是 A1,Store_Information 表格的別名是 A2。若我們沒有用表格別名的話, 第一行就會變成

SELECT Geography.region_name REGION, SUM(Store_Information.Sales) SALES

很明顯地,這就複雜多了。在這裡我們可以看到表格別名的功用:它能讓 SQL 句容易被瞭解, 尤其是這個 SQL 句含蓋好幾個不同的表格時。

接下來我們看第三行,就是 WHERE 子句。 這是我們闡述連接條件的地方。在這裡,我們要確認 Geography 表格中 store_name 欄位的值與 Store_Information 表格中 store_name 欄位的值是相等的。 這個 WHERE 子句是一個連接的靈魂人物,因為它的角色是確定兩個 表格之間的連接是正確的。如果 WHERE 子句是錯誤的, 我們就極可能得到一個笛卡兒連接 (Cartesian join)。笛卡兒連接會造成我們得到所有兩個表格 每兩行之間所有可能的組合。在這個例子中,笛卡兒連接會讓我們得到 4 x 4 = 16 行的結果。

下一頁:SQL 外部連接

網站導引   |   其他資源