1. 程式人生 > >ANY和SOME 運算子

ANY和SOME 運算子

在SQL中ANY和SOME是同義詞,所以下面介紹的時候只使用ANY,SOME的用法和功能和ANY一模一樣。和IN運算子不同,ANY必須和其他的比較運算子共同使用,而且必須將比較運算子放在ANY 關鍵字之前,所比較的值需要匹配子查詢中的任意一個值,這也就是ANY在英文中所表示的意義。

首先看一個ANY 運算子和等於運算子(=)共同使用的例子,下面的SQL語句檢索所有圖書出版年份內入會的讀者資訊:


SELECT * FROM T_Reader WHERE FYearOfJoin =ANY(select FYearPublished FROM T_Book) 

外部查詢中的WHERE子句指定FYearOfJoin 必須等於子查詢select FYearPublished FROM T_Book所返回的集合中的任意一個值。

執行完畢我們就能在輸出結果中看到下面的執行結果:


FID FNAME FYEAROFBIRTH FCITY FPROVINCE FYEAROFJOIN

1 Tom 1979 TangShan Hebei 2003

2 Sam 1981 LangFang Hebei 2001 3 Jerry 1966 DongGuan GuangDong 1995 4 Lily 1972 JiaXing ZheJiang 2005 5 Marry 1985 BeiJing BeiJing 1999 6 Kelly 1977 ZhuZhou HuNan 1995 7 Tim 1982 YongZhou HuNan 2001 9 John 1979 QingDao ShanDong 2003 11 July 1983 ZhuMaDian HeNan 1999 12 Fige 1981 JinCheng ShanXi 2003 

這個SQL語句的檢索結果與上一節介紹的使用IN 運算子得到的結果是一致的:


SELECT * FROM T_Reader WHERE FYearOfJoin IN(select FYearPublished FROM T_Book) 

也就是說“=ANY”等價於IN 運算子,而“<>ANY”則等價於NOT IN 運算子。

除了等於運算子,ANY運算子還可以和大於(>)、小於(<)、大於等於(>=)、小於等於(<=)等比較運算子共同使用。比如下面的SQL語句用於檢索在任何一個會員出生之前出版的圖書:


SELECT * FROM T_Book WHERE FYearPublished<ANY(SELECT FYearOfBirth FROM T_Reader) 

執行完畢我們就能在輸出結果中看到下面的執行結果:


FID FNAME FYEARPUBLISHED FCATEGORYID

6 History of China 1982 2

7 History of England 1860 2

8 History of America 1700 2

10 Atom 1930 3

11 RELATIVITY 1945 3

12 Computer 1970 3

13 Astronomy 1971 3

14 How To Singing 1771 5

注意,和IN 運算子不同,ANY 運算子不能與固定的集合相匹配,比如下面的SQL 語句是錯誤的:


SELECT * FROM T_Book WHERE FYearPublished<ANY(2001,2003,2005) 

不過這個限制並不會妨礙功能的實現,因為沒有對固定的集合進行ANY匹配的必要,因為待匹配的集合是固定的,所以上面的SQL語句完全可以用下面的SQL語句來代替:


SELECT * FROM T_Book WHERE FYearPublished<2005