Home [SQL] 子查詢(二)
Post
Cancel

[SQL] 子查詢(二)

在 Where in 中使用子查詢

1
2
3
4
5
--取得4月份有販賣之商品的商品名稱(使用子查詢)
select [商品名稱] from [商品清單]
where [商品ID] in 
(select distinct [商品ID] from [販賣資料]
where [處理日] between '2006-04-01' and '2006-04-30')

IN可能存在的效能疑慮(效能差),EXISTS可以取代

在 Form 中使用子查詢

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
--請輸出商品別的販賣單價合計與全部商品之販賣單價合計的比率(%)
--這裡的購買單價合計是指:購買單價*數量
select T2.商品名稱, T2.商品別總計, (T2.商品別總計/T1.總計)*100 '%'
from
(
    --總計
    select sum([數量]*B.販賣單價) 總計
    from [販賣資料] A
    join [商品清單] B on B.商品ID = A.商品ID
) T1,
(
	--計算商品別總數量、商品別總計
    select B.商品名稱, sum(A.數量) 商品別總數量, (B.販賣單價 * sum(A.數量)) 商品別總計
    from [販賣資料] A
    right join [商品清單] B on B.商品ID = A.商品ID
    group by B.商品名稱,B.販賣單價
) T2

執行結果

1
2
3
4
5
6
7
8
9
10
11
商品名稱  商品別總計	%
數位相機	NULL	NULL
HUB	       35000   0.756700
網路卡  	40000	0.864800
印表機	    25000	0.540500
掃描器	    30000	0.648600
17吋螢幕	250000	5.405400
19吋螢幕	285000	6.162100
15吋液晶螢幕 720000	15.567500
桌上型電腦	1080000	23.351300
筆記型電腦	2160000	46.702700

使用 Join

1
2
3
4
--取得4月份有販賣之商品的商品名稱(Join)
select distinct B.商品名稱 from [販賣資料] A
join [商品清單] B on B.商品ID = A.商品ID
where A.[處理日] between '2006-04-01' and '2006-04-30'

IN 的使用方法

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