Home [SQL] IN 的使用方式
Post
Cancel

[SQL] IN 的使用方式

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

範例一

取得負責人ID為1、2、3的負責人姓名

1
2
3
--取得負責人ID為1、2、3的負責人姓名
select [負責人姓名] from [負責人清單]
where [負責人ID] in (1,2,3)

執行結果

1
2
3
4
負責人姓名
鈴木
小野
齋藤

in所指定之括弧內的值為「符合其中任一數值」的意思,與使用or的意思是相同的。

1
2
select [負責人姓名] from [負責人清單]
where [負責人ID] = 1 or[負責人ID]= 2 or [負責人ID]= 3

範例三:In + Execpt 差集

1
2
3
4
5
6
7
8
9
10
--取得包含於負責人清單,但不包含分店負責人清單中的負責人的總販賣業績(販賣單價*數量)
select  sum(B.販賣單價 * A.數量) "總業績"
from [販賣資料] A
join [商品清單] B on B.商品ID = A.商品ID
where [負責人ID] in 
(
	select [負責人ID] from [dbo].[負責人清單]
	except
	select [分店負責人ID] from [dbo].[分店負責人清單]
) 

執行結果

1
2
總業績
4625000

範例二:In + Not IN

同上範例,只改成In + Not IN。

1
2
3
4
5
6
--取得包含於負責人清單,但不包含分店負責人清單中的負責人的總販賣業績(販賣單價*數量)
select sum(B.販賣單價 * A.數量) "總業績"
from [販賣資料] A
join [商品清單] B on B.商品ID = A.商品ID
where A.負責人ID in (select 負責人ID from [負責人清單]) --包含於負責人清單
and A.負責人ID not in (select [分店負責人ID] from [分店負責人清單]) --不包含分店負責人清單

[SQL] 檢查資料是否存在 Exists、Not Exists

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