七、SQL-子查詢⑦(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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。