SQL循序渐进(22)
| 编译：ZSC / 太平洋网络学院 |  |

EXISTS 和 ALL

EXISTS使用了一个子查询作为条件，只有当子查询返回行的时候这个条件才为真，如果子查询不返回任何的行条件就为假。如果商店在处理Chair的时候，有个顾客想看看所有拥有者的列表，就可以使用EXSIST，语句如下：

SELECT OWNERFIRSTNAME, OWNERLASTNAME

FROM ANTIQUEOWNERS

WHERE EXISTS

(SELECT *

FROM ANTIQUES

WHERE ITEM = 'Chair');

如果在Antiques列中有Chair，那么子查询就会返回一行或者多行，就使得EXISTS子句为真，然后让SQL列出拥有者来。如果没有搜索到Chair，则没有行被返回，条件就为假。

ALL是另外一个不寻常的关键字，因为ALL查询通常可以用不同的方法来进行，并且可能是一种更为简单的方法。举个例子来说明吧：

SELECT BUYERID, ITEM

FROM ANTIQUES

WHERE PRICE >= ALL

(SELECT PRICE

FROM ANTIQUES);

上面这条语句将返回最高价格的Item以及它的买方。子查询返回了Antiques表中的所有的Price列，而外层的查询逐行查询Antiques表，并且如果它的Price大于等于（或者ALL）列中的Prices，它就会被列出，它就是最好价格的Item。这里必须使用">="的原因是最高价格的Item要等于列表中的最高价格，因为这个Item在Price列中。