SQL中exists的使用方法

2022-09-25 01:51:11 字數 3450 閱讀 1104

有乙個查詢如下:

複製** **如下:

select c.customerid, companyname

from customers c

where exists(

select orderid from orders o

where o.customerid = cu.customerid)

這裡面的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 = publishers.pub_id

and type = \'business\')

複製** **如下:

select distinct pub_name

fro publishers

where pub_id in

(select pub_id

from titles

where type = \'business\')

比較使用 exists 和 = any 的查詢

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

複製** **如下:

select au_lname, au_fnamewww.cppcns.com

from authors

where exists

(select *

from publishers

where authors.city = publishers.city)

複製** **如下:

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 = titles.pub_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 = publishers.pub_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 ntbaypwkot exists

select * from xs_kc

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

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

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

幾個重要的點:

最裡層要用到的醒詢條件的表比如:xs.學號、kc.課程號等都要在前面的時候說明一下select * from kc,select distinct 姓名 from xs

不要在太注意中間的exists語句.

把exists和not exists巢狀時的返回值弄明白

本文標題: sql中exists的使用方法

本文位址: /shujuku/mssql/85108.html

SQL中exists的使用方法

exists用於檢查子查詢是否至少會返回一行資料,該子查詢實際上並不返回任何資料,而是返回值true或false 有乙個查詢如下 複製 如下 select c.customerid,companyname from customers c where exists select orderid fr...

SQL中EXISTS的使用

網上有一些關於exists 說明的例子,但都說的不是很詳細.比如對於著名的供貨商資料庫,查詢 找出 所有零件的 商的 商名,對於這個查詢,網上一些關於exists的說明文章都不能講清楚.我先解釋本文所用的資料庫例子,供貨商 資料庫,共3個表.供貨商表 s s sname 貨物表 p p pname ...

SQL中 IN 與 EXISTS的使用

大家在談到sql優化時,都會說到用exists 代替 in 查詢。現在就談談這兩個的用法。in查詢相當於多個or條件的疊加,這個比較好理解,比如下面的查詢 select from user where userid in 1 2,3 等效於 select from user where userid...