2014年12月5日 星期五

SQLite權威指南-CLP(command line program) [ 9 ]:多表連接(join)的應用

SQLite權威指南-CLP(command line program) [ 9 ]:多表連接(join)的應用


 


資料來源:SQLite權威指南 P028


 


 


多表連接
連接(join)是SELECT 命令的第一個操作,它產生初始的資訊,供語句的其他部分過濾和處
理。連接的結果是一個合成的關係(或表),它是SELECT 後繼操作的輸入。
也許從一個例子開始是最簡單的。



sqlite> SELECT foods.name,food_types.name FROM foods, food_types WHERE foods.type_id=food_types.id LIMIT 10;



-------------
name name
Bagels Bakery
Bagels, raisin Bakery
Bavarian Cream Pie Bakery
Bear Claws Bakery
Black and White cookies Bakery
Bread (with nuts) Bakery
Butterfingers Bakery
Carrot Cake Bakery
Chips Ahoy Cookies Bakery
Chocolate Bobka Bakery


 


網路範例:http://www.1keydata.com/tw/sql/sqljoins.html


 


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


Store_Information 表格






























Store_NameSalesTxn_Date
Los Angeles150005-Jan-1999
San Diego25007-Jan-1999
Los Angeles30008-Jan-1999
Boston70008-Jan-1999

Geography 表格

























Region_NameStore_Name
EastBoston
EastNew York
WestLos Angeles
WestSan 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
East700
West2050


在第一行中,我們告訴 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 行的結果。 


 













 




沒有留言:

張貼留言