濮阳杆衣贸易有限公司

主頁 > 知識庫 > MySQL exists 和in 詳解及區(qū)別

MySQL exists 和in 詳解及區(qū)別

熱門標(biāo)簽:如何選擇優(yōu)質(zhì)的外呼系統(tǒng) 南通電銷外呼系統(tǒng)哪家強(qiáng) 清遠(yuǎn)申請400電話 地圖簡圖標(biāo)注 手機(jī)外呼系統(tǒng)違法嗎 東莞外呼企業(yè)管理系統(tǒng) 桂林云電銷機(jī)器人收費(fèi) 沈陽智能外呼系統(tǒng)供應(yīng)商 谷歌地圖標(biāo)注位置圖解

MySQL exists 和in 詳解及區(qū)別

有一個查詢?nèi)缦拢?/p>

SELECT c.CustomerId, CompanyName  
FROM Customers c  
WHERE EXISTS(  
 SELECT OrderID FROM Orders o  
 WHERE o.CustomerID = cu.CustomerID)  

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

EXISTS用于檢查子查詢是否至少會返回一行數(shù)據(jù),該子查詢實(shí)際上并不返回任何數(shù)據(jù),而是返回值True或False。

EXISTS 指定一個子查詢,檢測行的存在。語法:EXISTS subquery。參數(shù) subquery 是一個受限的 SELECT 語句 (不允許有 COMPUTE 子句和 INTO 關(guān)鍵字)。結(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')

 比較使用 EXISTS 和 = ANY 的查詢

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

SELECT au_lname, au_fname
FROM authors
WHERE exists
  (SELECT *
  FROM publishers
  WHERE authors.city = publishers.city)
 

比較使用 EXISTS 和 IN 的查詢

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

SELECT title
FROM titles
WHERE EXISTS
  (SELECT *
  FROM publishers
  WHERE pub_id = titles.pub_id
  AND 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 學(xué)號=xs.學(xué)號 and 課程號=kc.課程號
)

把最外層的查詢xs里的數(shù)據(jù)一行一行的做里層的子查詢。

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

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

這個 exists 就是告訴上一層,這一行語句在我這里不成立。因?yàn)樗皇亲罡邔?,所以還要繼續(xù)向上返回。

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

幾個重要的點(diǎn):

  • 最里層要用到的醒詢條件的表比如:xs.學(xué)號、kc.課程號等都要在前面的時候說明一下select * from kc,select distinct 姓名 from xs
  • 不要在太注意中間的exists語句.
  • 把exists和not exists嵌套時的返回值弄明白

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

您可能感興趣的文章:
  • mysql中EXISTS和IN的使用方法比較
  • MySQL中exists、in及any的基本用法
  • MySQL中in與exists的使用及區(qū)別介紹
  • 對比分析MySQL語句中的IN 和Exists
  • mySQL中in查詢與exists查詢的區(qū)別小結(jié)
  • MYSQL IN 與 EXISTS 的優(yōu)化示例介紹
  • mysql not in、left join、IS NULL、NOT EXISTS 效率問題記錄
  • MySQL中in和exists區(qū)別詳解

標(biāo)簽:臨沂 重慶 湖州 內(nèi)蒙古 貴州 成都 天津 常德

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL exists 和in 詳解及區(qū)別》,本文關(guān)鍵詞  MySQL,exists,和,詳解,及,區(qū)別,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL exists 和in 詳解及區(qū)別》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL exists 和in 詳解及區(qū)別的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    仪征市| 瑞安市| 西城区| 博罗县| 宜宾市| 旅游| 昭苏县| 兴海县| 花垣县| 新乡县| 磴口县| 玉林市| 高青县| 广灵县| 安丘市| 会宁县| 东台市| 邵东县| 织金县| 儋州市| 巧家县| 芮城县| 海安县| 舟山市| 荥阳市| 孟津县| 兴城市| 河南省| 大同县| 土默特右旗| 平定县| 杭锦后旗| 龙海市| 新龙县| 泗阳县| 元氏县| 九寨沟县| 姜堰市| 庆阳市| 新闻| 疏附县|