sqlserver中有三個關鍵字可以修改比較運算子:all、any和some,其中some和any等價。
官方的參考文件
他們作用於比較運算子和子查詢之間,作用類似exists、not exists、in、not in以及其他邏輯意義,這些語法同樣被sqlserver2000支援但是很少看到有人用它們。
setnocount
onuse
tempdb
goif (
object_id (
't1' )
isnot
null )
drop
table
t1create
table
t1 (n
int )
insert
into
t1select
2union
select
3if (
object_id (
't2' )
isnot
null )
drop
table
t2create
table
t2 (n
int )
insert
into
t2select
1union
select
2union
select
3union
select
4select
*from
t2where n
>
all (
select n
from
t1 )
--4select
*from
t2where n
>
any (
select n
from
t1 )
--3,4
--select * from t2 where n>some(select n from t1) --3,4
select
*from
t2where n
=all (
select n
from
t1 )
--無資料
select
*from
t2where n
=any (
select n
from
t1 )
--2,3
--select * from t2 where n=some(select n from t1) --2,3
select
*from
t2where n
<
all (
select n
from
t1 )
--1select
*from
t2where n
<
any (
select n
from
t1 )
--1,2
--select * from t2 where n
select
*from
t2where n
<>
all (
select n
from
t1 )
--1,4
select
*from
t2where n
<>
any (
select n
from
t1 )
--1,2,3,4
--select * from t2 where n<>some(select n from t1)--1,2,3,4
setnocount
off注意,如果t1中包含null資料,那麼所有all相關的比較運算將不會返回任何結果,原因就不用多解釋了。而因為t1和t2表的null的存在他們和not exists之類的比較符會有一些區別。
比如下面兩句
select * from t2 a where not exists(select 1 from t1 where n>=a.n)
select * from t2 where n >all(select n from t1)
他們邏輯上意義很像但是對於null的處理卻是恰恰相反,第一句會忽略子查詢的null而把t2的null同時查出來,第二句卻是忽略了t2的null同時會因為t1中的null而無法查詢到資料。
被遺忘的SQLServer比較運算子修飾詞
sqlserver中有三個關鍵字可以修改比較運算子 all any和some,其中some和any等價。官方的參考文件 他們作用於比較運算子和子查詢之間,作用類似exists not exists in not in以及其他邏輯意義,這些語法同樣被sqlserver2000支援但是很少看到有人用它們...
被遺忘的SQLServer比較運算子修飾詞
sqlserver中有三個關鍵字可以修改比較運算子 all any和some,其中some和any等價。官方的參考文件 他們作用於比較運算子和子查詢之間,作用類似exists not exists in not in以及其他邏輯意義,這些語法同樣被sqlserver2000支援但是很少看到有人用它們...
被遺忘的角落有著被遺忘的人
如不是我變了模樣。便是你淡忘了時光。為自己的心門上了鎖。從此再也無人能愉悅。最怕此生決定忘記你,卻突然得到你的訊息。如果我的手不小心碰著你的手,你是會躲開,還是下意識牽住。能駕馭你的人,其實就是你心甘情願,視如生命愛的人。最好的時光,就是你喜歡我,我也喜歡你,可我們都還沒表白。非主流個性簽名 願意委...