當前位置

首頁 > 商務英語 > 計算機英語 > 數據庫查詢exists的用法

數據庫查詢exists的用法

推薦人: 來源: 閱讀: 1.7W 次

數據庫查詢exists的用法的用法你知道嗎?下面小編就跟你們詳細介紹下數據庫查詢exists的用法的用法,希望對你們有用。

padding-bottom: 50%;">數據庫查詢exists的用法

  數據庫查詢exists的用法的用法如下:

有一個查詢如下:

複製代碼 代碼如下:

SELECT omerId, CompanyName

FROM Customers c

WHERE EXISTS(

SELECT OrderID FROM Orders o

WHERE omerID = omerID)

這裏面的EXISTS是如何運作呢?子查詢返回的是OrderId字段,可是外面的查詢要找的是CustomerID和CompanyName字段,這兩個字段肯定不在OrderID裏面啊,這是如何匹配的呢?

EXISTS用於檢查子查詢是否至少會返回一行數據,該子查詢實際上並不返回任何數據,而是返回值True或False。

EXISTS 指定一個子查詢,檢測行的存在。語法:EXISTS subquery。參數 subquery 是一個受限的 SELECT 語句 (不允許有 COMPUTE 子句和 INTO 關鍵字)。結果類型爲 Boolean,如果子查詢包含行,則返回 TRUE。

在子查詢中使用 NULL 仍然返回結果集

這個例子在子查詢中指定 NULL,並返回結果集,通過使用 EXISTS 仍取值爲 TRUE。

複製代碼 代碼如下:

SELECT CategoryName

FROM Categories

WHERE EXISTS (SELECT NULL)

ORDER BY CategoryName ASC

比較使用 EXISTS 和 IN 的查詢

這個例子比較了兩個語義類似的查詢。第一個查詢使用 EXISTS 而第二個查詢使用 IN。注意兩個查詢返回相同的信息。

複製代碼 代碼如下:

SELECT DISTINCT pub_name

FROM publishers

WHERE EXISTS

(SELECT *

FROM titles

WHERE pub_id = _id

AND type = 'business')

複製代碼 代碼如下:

SELECT distinct pub_name

FROM publishers

WHERE pub_id IN

(SELECT pub_id

FROM titles

WHERE type = 'business')

比較使用 EXISTS 和 = ANY 的查詢

本示例顯示查找與出版商住在同一城市中的作者的兩種查詢方法:第一種方法使用 = ANY,第二種方法使用 EXISTS。注意這兩種方法返回相同的信息。

複製代碼 代碼如下:

SELECT au_lname, au_fname

FROM authors

WHERE exists

(SELECT *

FROM publishers

WHERE = )

複製代碼 代碼如下:

SELECT au_lname, au_fname

FROM authors

WHERE city = ANY

(SELECT city

FROM publishers)

比較使用 EXISTS 和 IN 的查詢

本示例所示查詢查找由位於以字母 B 開頭的城市中的任一出版商出版的書名:

複製代碼 代碼如下:

SELECT title

FROM titles

WHERE EXISTS

(SELECT *

FROM publishers

WHERE pub_id = _id

AND city LIKE 'B%')

複製代碼 代碼如下:

SELECT title

FROM titles

WHERE pub_id IN

(SELECT pub_id

FROM publishers

WHERE city LIKE 'B%')

使用 NOT EXISTS

NOT EXISTS 的作用與 EXISTS 正相反。如果子查詢沒有返回行,則滿足 NOT EXISTS 中的 WHERE 子句。本示例查找不出版商業書籍的出版商的名稱:

複製代碼 代碼如下:

SELECT pub_name

FROM publishers

WHERE NOT EXISTS

(SELECT *

FROM titles

WHERE pub_id = _id

AND type = 'business')

ORDER BY pub_name

又比如以下 SQL 語句:

複製代碼 代碼如下:

select distinct 姓名 from xs

where not exists (

select * from kc

where not exists (

select * from xs_kc

where 學號=xs.學號 and 課程號=kc.課程號

)

把最外層的查詢xs裏的數據一行一行的做裏層的子查詢。

中間的 exists 語句只做出對上一層的返回 true 或 false,因爲查詢的條件都在 where 學號=xs.學號 and 課程號=kc.課程號這句話裏。每一個 exists 都會有一行值。它只是告訴一層,最外層的查詢條件在這裏成立或都不成立,返回的時候值也一樣回返回上去。直到最高層的時候如果是 true(真)就返回到結果集。爲 false(假)丟棄。

複製代碼 代碼如下:

where not exists

select * from xs_kc

where 學號=xs.學號 and 課程號=kc.課程號

這個 exists 就是告訴上一層,這一行語句在我這裏不成立。因爲他不是最高層,所以還要繼續向上返回。

select distinct 姓名 from xs where not exists (這裏的 exists 語句收到上一個爲 false 的值。他在判斷一下,結果就是爲 true(成立),由於是最高層所以就會把這行的結果(這裏指的是查詢條件)返回到結果集。