Home [SQL] 結合數個資料表 Inner Join (Join)
Post
Cancel

[SQL] 結合數個資料表 Inner Join (Join)

Inner Join (Join)

inner join:內部結合,兩張表都有的數據才會顯示,可以理解為「有效連結」(兩表的交集)。
(inner join 可以省略 inner,只寫join)

1
2
3
4
--結合販賣資料與商品清單,並取得處理日、商品ID、商品名稱的列表
select T2.處理日, T1.商品ID, T1.商品名稱 
from [商品清單] as T1
join [販賣資料] as T2 on T1.商品ID = T2.商品ID

練習

練習1:2 Join

取得由誰販賣(姓名)、何時、賣掉什麼(實際商品名稱)的列表

1
2
3
4
5
--取得由誰販賣(姓名)、何時、賣掉什麼(實際商品名稱)的列表
select T3.負責人姓名, T1.處理日, T2.商品名稱 
from [販賣資料] T1
join [商品清單] T2 on T1.商品ID = T2.商品ID
join [負責人清單] T3 on T1.負責人ID = T3.負責人ID

練習2: 2 Join

取得負責人「鈴木」在何時賣掉什麼東西的列表

1
2
3
4
5
6
--取得負責人「鈴木」在何時賣掉什麼東西的列表
select T3.負責人姓名, T1.處理日, T2.商品名稱 
from [販賣資料] T1
join [商品清單] T2 on T1.商品ID = T2.商品ID
join [負責人清單] T3 on T1.負責人ID = T3.負責人ID
where T3.負責人姓名 = '鈴木'

練習3: 3 join + Between And

取得Waikiki軟體於5月份所購入之周邊設備的商品名稱和負責人名稱

1
2
3
4
5
6
7
--取得Waikiki軟體於5月份所購入之周邊設備的商品名稱和負責人名稱
select B.商品名稱, D.負責人姓名
from [販賣資料] A
join [商品清單] B on A.商品ID = B.商品ID
join [顧客清單] C on C.顧客ID = A.顧客ID
join [負責人清單] D on D.負責人ID = A.負責人ID
where B.群組名稱 = '周邊設備' and C.顧客名稱 = 'Waikiki軟體' and A.處理日 between '2006-05-01' and '2006-05-31'

練習4:2 Join + Group By + Having + Datepart + Sum()

請輸出單月的購買單價有500000以上的顧客的購買年份、月份,還有顧客名稱、購買單價合計。
這裡的購買單價合計是指:購買單價*數量

1
2
3
4
5
6
7
8
--請輸出單月的購買單價有500000以上的顧客的購買年份、月份,還有顧客名稱、購買單價合計。
--這裡的購買單價合計是指:購買單價*數量
select DATEPART(YYYY,[處理日]) 年份, DATEPART(MM,[處理日]) 月份, C.顧客名稱, sum(B.[販賣單價]*A.數量) 購買合計
from [販賣資料] A
join [商品清單] B on B.商品ID = A.商品ID
join [顧客清單] C on C.顧客ID = A.顧客ID
group by DATEPART(YYYY,[處理日]), DATEPART(MM,[處理日]),C.顧客名稱
having sum(B.[販賣單價]*A.數量) >= 500000

以月份為單位來統計販賣合計,並將統計出來的結果以Having來指定抓取資料的條件。

Left Join, Right Join, Full Join

  • left join:可以理解為「以左顯示」,會返回左邊資料表所有的資料列,就算是沒有符合連接條件,而右側資料表如果沒有符合匹配的資料值就會顯示null

比如:on a.id = b.id,則顯示a表中存在的全部數據,以及a、b中都有的數據,a中有,b中沒有的數據以null顯示。

  • right join:可以理解為「以右顯示」,會返回右邊資料表所有的資料列,就算是沒有符合連接條件,而左則資料表如果沒有符合匹配的資料值就會顯示null

比如:on a.id = b.id,則顯示b表中存在的全部數據,以及a、b中都有的數據,b中有,a中沒有的數據以null顯示。

  • full join:可以理解為「全連接」(兩表的聯集),兩張表中所有的數據都顯示。

[SQL筆記] 多表查詢

This post is licensed under CC BY 4.0 by the author.