濮阳杆衣贸易有限公司

主頁 > 知識庫 > SQL中exists的使用方法

SQL中exists的使用方法

熱門標簽:最新人工智能電銷機器人 如何做地圖標注圖鋪 數(shù)字匠心電銷機器人 蘭州語音外呼系統(tǒng)運營商 陜西電銷外呼系統(tǒng)好用嗎 al智能電話機器人 銀川高頻外呼回撥系統(tǒng)多少錢 沒聽見電話機器人幫你接 成都電話外呼系統(tǒng)一般多少錢
有一個查詢?nèi)缦拢?
復制代碼 代碼如下:

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用于檢查子查詢是否至少會返回一行數(shù)據(jù),該子查詢實際上并不返回任何數(shù)據(jù),而是返回值True或False。
EXISTS 指定一個子查詢,檢測行的存在。語法:EXISTS subquery。參數(shù) subquery 是一個受限的 SELECT 語句 (不允許有 COMPUTE 子句和 INTO 關鍵字)。結(jié)果類型為 Boolean,如果子查詢包含行,則返回 TRUE。
在子查詢中使用 NULL 仍然返回結(jié)果集
這個例子在子查詢中指定 NULL,并返回結(jié)果集,通過使用 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
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 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 子句。本示例查找不出版商業(yè)書籍的出版商的名稱:
復制代碼 代碼如下:

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里的數(shù)據(jù)一行一行的做里層的子查詢。
中間的 exists 語句只做出對上一層的返回 true 或 false,因為查詢的條件都在 where 學號=xs.學號 and 課程號=kc.課程號這句話里。每一個 exists 都會有一行值。它只是告訴一層,最外層的查詢條件在這里成立或都不成立,返回的時候值也一樣回返回上去。直到最高層的時候如果是 true(真)就返回到結(jié)果集。為 false(假)丟棄。
復制代碼 代碼如下:

where not exists
select * from xs_kc
where 學號=xs.學號 and 課程號=kc.課程號

這個 exists 就是告訴上一層,這一行語句在我這里不成立。因為他不是最高層,所以還要繼續(xù)向上返回。
select distinct 姓名 from xs where not exists (這里的 exists 語句收到上一個為 false 的值。他在判斷一下,結(jié)果就是為 true(成立),由于是最高層所以就會把這行的結(jié)果(這里指的是查詢條件)返回到結(jié)果集。
幾個重要的點:
最里層要用到的醒詢條件的表比如:xs.學號、kc.課程號等都要在前面的時候說明一下select * from kc,select distinct 姓名 from xs
不要在太注意中間的exists語句.
把exists和not exists嵌套時的返回值弄明白
您可能感興趣的文章:
  • MySQL中in與exists的使用及區(qū)別介紹
  • 對比分析MySQL語句中的IN 和Exists
  • mysql exists與not exists實例詳解
  • 安裝mysql出錯”A Windows service with the name MySQL already exists.“如何解決
  • MySQL的子查詢中FROM和EXISTS子句的使用教程
  • MYSQL IN 與 EXISTS 的優(yōu)化示例介紹
  • mssql和sqlite中關于if not exists 的寫法
  • mysql not in、left join、IS NULL、NOT EXISTS 效率問題記錄
  • UCenter info: MySQL Query Error SQL:SELECT value FROM [Table]vars WHERE noteexists
  • mysql insert if not exists防止插入重復記錄的方法
  • 詳解SQL EXISTS 運算符

標簽:朔州 遼源 邢臺 鹽城 巴彥淖爾 通化 本溪 宜春

巨人網(wǎng)絡通訊聲明:本文標題《SQL中exists的使用方法》,本文關鍵詞  SQL,中,exists,的,使用方法,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關。
  • 相關文章
  • 下面列出與本文章《SQL中exists的使用方法》相關的同類信息!
  • 本頁收集關于SQL中exists的使用方法的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    阿尔山市| 汤阴县| 务川| 灵山县| 青海省| 承德县| 土默特右旗| 黄骅市| 汝阳县| 乐安县| 沧源| 沅陵县| 乃东县| 壶关县| 连城县| 兰州市| 佛教| 通城县| 木里| 苗栗县| 宣武区| 通辽市| 张家川| 张北县| 准格尔旗| 洛宁县| 台前县| 舞阳县| 建宁县| 张北县| 邓州市| 黑河市| 香格里拉县| 申扎县| 尤溪县| 天镇县| 黔西| 桦甸市| 正阳县| 开江县| 龙门县|