語法
EXISTS subquery
參數
subquery:是一個受限的 SELECT 語句 (不允許有 COMPUTE 子句和 INTO 關鍵字)。有關更多信息,請參見 SELECT 中有關子查詢的討論。
結果類型:Boolean
結果值:如果子查詢包含行,則返回 TRUE。
示例
A. 在子查詢中使用 NULL 仍然返回結果集
這個例子在子查詢中指定 NULL,並返回結果集,通過使用 EXISTS 仍取值爲 TRUE。
USE Northwind
GO
SELECT CategoryName
FROM Categories
WHEREEXISTS (SELECTNULL)
ORDERBY CategoryName ASC
GO
B. 比較使用 EXISTS 和 IN 的查詢
這個例子比較了兩個語義類似的查詢。第一個查詢使用 EXISTS 而第二個查詢使用 IN。注意兩個查詢返回相同的信息。
USE pubs
GO
SELECTDISTINCT pub_name
FROM publishers
WHEREEXISTS
(SELECT*
FROM titles
WHERE pub_id = publishers.pub_id
AND type = \'business\')
GO
-- Or, using the IN clause:
USE pubs
GO
SELECTdistinct pub_name
FROM publishers
WHERE pub_id IN
(SELECT pub_id
FROM titles
WHERE type = \'business\')
GO
下面是任一查詢的結果集:
pub_name
----------------------------------------
Algodata Infosystems
New Moon Books
C.比較使用 EXISTS 和 =ANY 的查詢
本示例顯示查找與出版商住在同一城市中的作者的兩種查詢方法:第一種方法使用 =ANY,第二種方法使用 EXISTS。注意這兩種方法返回相同的信息。
USE pubs
GO
SELECT au_lname, au_fname
FROM authors
WHEREexists
(SELECT*
FROM publishers
WHERE authors.city = publishers.city)
GO
-- Or, using = ANY
USE pubs
GO
SELECT au_lname, au_fname
FROM authors
WHERE city =ANY
(SELECT city
FROM publishers)
GO
D.比較使用 EXISTS 和 IN 的查詢
本示例所示查詢查找由位於以字母 B 開頭的城市中的任一出版商出版的書名:
USE pubs
GO
SELECT title
FROM titles
WHEREEXISTS
(SELECT*
FROM publishers
WHERE pub_id = titles.pub_id
AND city LIKE \'B%\')
GO
-- Or, using IN:
USE pubs
GO
SELECT title
FROM titles
WHERE pub_id IN
(SELECT pub_id
FROM publishers
WHERE city LIKE \'B%\')
GO
E. 使用 NOTEXISTS
NOTEXISTS 的作用與 EXISTS 正相反。如果子查詢沒有返回行,則滿足 NOTEXISTS 中的 WHERE 子句。本示例查找不出版商業書籍的出版商的名稱:
USE pubs
GO
SELECT pub_name
FROM publishers
WHERENOTEXISTS
(SELECT*
FROM titles
WHERE pub_id = publishers.pub_id
AND type = \'business\')
ORDERBY pub_name
GO