我們介紹連接(join)的概念。要了解連接,我們需要用到許多我們之前已介紹過的指令。我們先假設(shè)我們有以下的兩個表格
Store_Information 表格
store_namesalesdate
Los Angeles$1500jan-05-1999
San Francisco$300jan-08-1999
Boston$700jan-08-1999
Geography 表格
region_namestore_name
EastBoston
EastNew York
WestLos Angeles
WestSan Diego
而我們要知道每一區(qū) (region_name) 的營業(yè)額 (sales)。 Geography 這個表格告訴我們每一區(qū)有哪些店,而 Store_Information 告訴我們每一個店的營業(yè)額。若我們要知道每一區(qū)的營業(yè)額,我們需要將這兩個不同表格中的資料串聯(lián)起來。當我們仔細了解這兩個表格后,我們會發(fā)現(xiàn)它們可經(jīng)由一個相同的欄位,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
結(jié)果:
REGION SALES
East $700
West $2050
在第一行中,我們告訴 SQL 去選出兩個欄位:第一個欄位是 Geography 表格中的 Region_name 欄位 (我們?nèi)×艘粋€別名叫做 REGION);第二個欄位是 Store_Information 表格中的 sales 欄位 (別名為 SALES)。請注意在這里我們有用到表格別名:Geography 表格的別名是 A1,Store_Information 表格的別名是 A2。若我們沒有用表格別名的話, 第一行就會變成
SELECT Geography.region_name REGION, SUM(Store_Information.Sales) SALES
很明顯地,這就復(fù)雜多了。在這里我們可以看到表格別名的功用:它能讓 SQL 句容易被了解,尤其是這個 SQL 句含蓋好幾個不同的表格時。
接下來我們看第三行,就是 WHERE 子句。 這是我們闡述連接條件的地方。在這里,我們要確認 Geography 表格中 Store_name 欄位的值與 Store_Information 表格中 store_name 欄位的值是相等的。這個 WHERE 子句是一個連接的靈魂人物,因為它的角色是確定兩個表格之間的連接是正確的。如果 WHERE子句是錯誤的,我們就極可能得到一個笛卡兒連接 (Cartesian join)。笛卡兒連接會造成我們得到所有兩個表格每兩行之間所有可能的組合。在這個例子中,笛卡兒連接會讓我們得到 4 x 4 = 16 行的結(jié)果。
Store_Information 表格
store_namesalesdate
Los Angeles$1500jan-05-1999
San Francisco$300jan-08-1999
Boston$700jan-08-1999
Geography 表格
region_namestore_name
EastBoston
EastNew York
WestLos Angeles
WestSan Diego
而我們要知道每一區(qū) (region_name) 的營業(yè)額 (sales)。 Geography 這個表格告訴我們每一區(qū)有哪些店,而 Store_Information 告訴我們每一個店的營業(yè)額。若我們要知道每一區(qū)的營業(yè)額,我們需要將這兩個不同表格中的資料串聯(lián)起來。當我們仔細了解這兩個表格后,我們會發(fā)現(xiàn)它們可經(jīng)由一個相同的欄位,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
結(jié)果:
REGION SALES
East $700
West $2050
在第一行中,我們告訴 SQL 去選出兩個欄位:第一個欄位是 Geography 表格中的 Region_name 欄位 (我們?nèi)×艘粋€別名叫做 REGION);第二個欄位是 Store_Information 表格中的 sales 欄位 (別名為 SALES)。請注意在這里我們有用到表格別名:Geography 表格的別名是 A1,Store_Information 表格的別名是 A2。若我們沒有用表格別名的話, 第一行就會變成
SELECT Geography.region_name REGION, SUM(Store_Information.Sales) SALES
很明顯地,這就復(fù)雜多了。在這里我們可以看到表格別名的功用:它能讓 SQL 句容易被了解,尤其是這個 SQL 句含蓋好幾個不同的表格時。
接下來我們看第三行,就是 WHERE 子句。 這是我們闡述連接條件的地方。在這里,我們要確認 Geography 表格中 Store_name 欄位的值與 Store_Information 表格中 store_name 欄位的值是相等的。這個 WHERE 子句是一個連接的靈魂人物,因為它的角色是確定兩個表格之間的連接是正確的。如果 WHERE子句是錯誤的,我們就極可能得到一個笛卡兒連接 (Cartesian join)。笛卡兒連接會造成我們得到所有兩個表格每兩行之間所有可能的組合。在這個例子中,笛卡兒連接會讓我們得到 4 x 4 = 16 行的結(jié)果。