欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2017年01月16日 08:49:02   投稿:lqh  
本文章向大家介紹MySQL exists 和in 使用方法以及他們之間的區(qū)別,需要的朋友可以參考下

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是如何運作呢?子查詢返回的是OrderId字段,可是外面的查詢要找的是CustomerID和CompanyName字段,這兩個字段肯定不在OrderID里面啊,這是如何匹配的呢?

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

EXISTS 指定一個子查詢,檢測行的存在。語法:EXISTS subquery。參數(shù) 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')

 比較使用 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 學號=xs.學號 and 課程號=kc.課程號
)

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

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

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

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

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

幾個重要的點:

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

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

相關文章

  • MySQL在Windows上安裝的詳細流程

    MySQL在Windows上安裝的詳細流程

    MySQL 是最流行的數(shù)據(jù)庫管理系統(tǒng) (DBMS) 之一,它輕量、開源且易于安裝和使用,因此對于那些剛開始學習和使用關系數(shù)據(jù)庫的人來說是一個不錯的選擇, 本文主要系統(tǒng)介紹Windows的環(huán)境下MySQL的安裝過程和驗證過程,需要的朋友可以參考下
    2024-12-12
  • MySQL中浮點型轉字符型可能會遇的問題詳解

    MySQL中浮點型轉字符型可能會遇的問題詳解

    類型轉換是我們?nèi)粘i_發(fā)中經(jīng)常會遇到的一個需求,最近在將浮點型轉換成字符型的時候就遇到了一個問題,所以總結分享出來,下面這篇文章主要給大家介紹了MySQL中關于浮點型轉字符型可能遇到的問題的相關資料,需要的朋友可以參考下。
    2017-09-09
  • mysql 5.1版本修改密碼及遠程登錄mysql數(shù)據(jù)庫的方法

    mysql 5.1版本修改密碼及遠程登錄mysql數(shù)據(jù)庫的方法

    這篇文章主要介紹了mysql 5.1版本修改密碼及遠程登錄mysql數(shù)據(jù)庫的方法,需要的朋友可以參考下
    2017-04-04
  • MyBatis-Plus查詢不到數(shù)據(jù)但使用SQL可以查詢到數(shù)據(jù)的問題排查解決

    MyBatis-Plus查詢不到數(shù)據(jù)但使用SQL可以查詢到數(shù)據(jù)的問題排查解決

    在使用MyBatis-Plus時,有時會出現(xiàn)查詢不到數(shù)據(jù)的問題,而直接執(zhí)行SQL卻能查詢到數(shù)據(jù),本文將介紹如何排查和解決這一問題,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-09-09
  • mysql格式化字符串長度不夠補0問題

    mysql格式化字符串長度不夠補0問題

    這篇文章主要介紹了mysql格式化字符串長度不夠補0問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Mysql中的查詢加強和多表查詢詳解

    Mysql中的查詢加強和多表查詢詳解

    這篇文章主要介紹了Mysql中的查詢加強和多表查詢詳解,在MySQL中,查詢加強主要包括使用索引、優(yōu)化查詢語句和使用存儲過程等方面,通過創(chuàng)建適當?shù)乃饕?可以大大提高查詢的效率,需要的朋友可以參考下
    2023-10-10
  • MySql 空間索引的實現(xiàn)

    MySql 空間索引的實現(xiàn)

    MySQL空間索引是一種用于優(yōu)化地理空間數(shù)據(jù)查詢的數(shù)據(jù)結構,通過為幾何數(shù)據(jù)類型創(chuàng)建空間索引,可以高效地對空間數(shù)據(jù)進行查詢和操作,感興趣的可以了解一下
    2024-11-11
  • php 不能連接數(shù)據(jù)庫 php error Can''t connect to local MySQL server

    php 不能連接數(shù)據(jù)庫 php error Can''t connect to local MySQL server

    php 不能連接數(shù)據(jù)庫 php error Can't connect to local MySQL server through socket '/tmp/mysql.sock'
    2011-05-05
  • Mysql慢查詢優(yōu)化方法及優(yōu)化原則

    Mysql慢查詢優(yōu)化方法及優(yōu)化原則

    這篇文章主要介紹了Mysql慢查詢優(yōu)化方法及優(yōu)化原則,本文給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-05-05
  • MySQL按照漢字的拼音排序簡單實例

    MySQL按照漢字的拼音排序簡單實例

    下面小編就為大家?guī)硪黄狹ySQL按照漢字的拼音排序簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01

最新評論