标题:用 ANY、SOME 或 ALL 修改的比较运算符
只看楼主
shiyulun1984
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-10-31
 问题点数:0 回复次数:2 
用 ANY、SOME 或 ALL 修改的比较运算符

可以用 ALL 或 ANY 关键字修改引入子查询的比较运算符。SOME 是 SQL-92 标准的 ANY 的等效物。

由带修改的比较运算符引入的子查询返回一列零值或更多值,并且可以包括 GROUP BY 或 HAVING 子句。这些子查询可通过 EXISTS 重新表述。

以 > 比较运算符为例,>ALL 表示大于每一个值;换句话说,大于最大值。例如,>ALL (1, 2, 3) 表示大于 3。>ANY 表示至少大于一个值,也就是大于最小值。因此 >ANY (1, 2, 3) 表示大于 1。

要使带有 >ALL 的子查询中的某行满足外部查询中指定的条件,引入子查询的列中的值必须大于由子查询返回的值的列表中的每个值。

同样,>ANY 表示要使某一行满足外部查询中指定的条件,引入子查询的列中的值必须至少大于由子查询返回的值的列表中的一个值。

说明 下例可以用多种方法运行,只要内部查询只返回一个值即可。


USE pubs
-- Option 1 using MAX in the inner query
SELECT title
FROM titles
HAVING MAX(advance) > ALL
WHERE advance > ALL
(
SELECT MAX(advance)
FROM publishers INNER JOIN titles ON
titles.pub_id = publishers.pub_id
WHERE pub_name = 'Algodata Infosystems'
)

-- Option 2 using GROUP BY and HAVING and no ALL
USE pubs
SELECT title
FROM titles
GROUP BY title
HAVING MAX(advance) >
(
SELECT MAX(advance)
FROM publishers INNER JOIN titles ON
titles.pub_id = publishers.pub_id
WHERE pub_name = 'Algodata Infosystems'
)

下面的查询提供一个由 ANY 修改的比较运算符引入的子查询的示例。它将查找收到的预付款大于 Algodata Infosystems 支付的最低预付款金额的书名。

USE pubs
SELECT title
FROM titles
WHERE advance > ANY
(SELECT advance
FROM publishers INNER JOIN titles
ON titles.pub_id = publishers.pub_id
AND pub_name = 'Algodata Infosystems')

下面是结果集:

title
---------------------------------------------------------------
You Can Combat Computer Stress!
The Gourmet Microwave
But Is It User Friendly?
Secrets of Silicon Valley
Computer Phobic and Non-Phobic Individuals: Behavior Variations
Life Without Fear
Onions, Leeks, and Garlic: Cooking Secrets of the Mediterranean
Sushi, Anyone?

(8 row(s) affected)

搜索更多相关主题的帖子: 运算符 ALL ANY SOME 
2007-07-04 14:47
shiyulun1984
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-10-31
得分:0 
回复:(shiyulun1984)用 ANY、SOME 或 ALL 修改的比...

对于每种书名,内部查询查找一列由 Algodata 支付的预付款金额。外部查询查看列表中的所有值,并确定当前考虑的书名是否已收到大于任何其它金额的预付款。换句话说,将查找预付款等于或大于 Algodata 支付的最低金额的书名。

如果子查询不返回任何值,那么整个查询将不会返回任何值。

=ANY 运算符与 IN 等效。例如,要查找与出版商住在同一个城市的作者,可以使用 IN 或 =ANY。

USE pubs
SELECT au_lname, au_fname
FROM authors
WHERE city IN
(SELECT city
FROM publishers)

USE pubs
SELECT au_lname, au_fname
FROM authors
WHERE city = ANY
(SELECT city
FROM publishers)

下面是任一查询的结果集:

au_lname au_fname
-------- ---------
Carson Cheryl
Bennet Abraham

(2 row(s) affected)

但是,< >ANY 运算符与 NOT IN 有所不同:< >ANY 表示不等于 a,或不等于 b,或不等于 c。而 NOT IN 表示不等于 a,且不等于 b,且不等于 c。但 <>ALL 与 NOT IN 意义相同。

2007-07-04 14:48
shiyulun1984
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-10-31
得分:0 

例如,下面的查询查找在没有出版商的城市中居住的作者。

USE pubs
SELECT au_lname, au_fname
FROM authors
WHERE city <> ANY
(SELECT city
FROM publishers)

下面是结果集:

au_lname au_fname
---------------------------------------- --------------------
White Johnson
Green Marjorie
Carson Cheryl
O'Leary Michael
Straight Dean
Smith Meander
Bennet Abraham
Della Buena Ann
Gringlesby Burt
Locksley Charlene
Greene Morningstar
Blotchet-Halls Reginald
Yokomoto Akiko
del Covello Innes
DeFrance Michel
Stringer Dirk
MacFeather Stearns
Karsen Livia
Panteley Sylvia
Hunter Sheryl
McBadden Heather
Ringer Anne
Ringer Albert

(23 row(s) affected)

因为每个作者所在的城市中都有一个或多个出版商不在那里居住,所以结果包括所有 23 个作者。内部查询找出所有住有出版商的城市,然后对于每个城市,外部查询查找不住在该城市的作者。

但是,如果在该查询中使用 NOT IN,那么结果将包括除了 Cheryl Carson 和 Abraham Bennet 以外的所有作者,因为他们住在 Algodata Infosystems 所处的 Berkeley。

USE pubs
SELECT au_lname, au_fname
FROM authors
WHERE city NOT IN
(SELECT city
FROM publishers)

下面是结果集:

au_lname au_fname
---------------------------------------- --------------------
White Johnson
Green Marjorie
O'Leary Michael
Straight Dean
Smith Meander
Della Buena Ann
Gringlesby Burt
Locksley Charlene
Greene Morningstar
Blotchet-Halls Reginald
Yokomoto Akiko
del Covello Innes
DeFrance Michel
Stringer Dirk
MacFeather Stearns
Karsen Livia
Panteley Sylvia
Hunter Sheryl
McBadden Heather
Ringer Anne
Ringer Albert

(21 row(s) affected)

还可以通过使用 < >ALL 运算符获得相同的结果,该运算符与 NOT IN 等效。

USE pubs
SELECT au_lname, au_fname
FROM authors
WHERE city <> ALL
(SELECT city
FROM publishers)

2007-07-04 14:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-152669-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.509523 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved