《Mysql必讀MySQL exists 和in 詳解及區別》要點:
本文介紹了Mysql必讀MySQL exists 和in 詳解及區別,希望對您有用。如果有疑問,可以聯系我們。
MySQL exists 和in 詳解及區別MYSQL數據庫
有一個查詢如下:MYSQL數據庫
SELECT c.CustomerId, CompanyName FROM Customers c WHERE EXISTS( SELECT OrderID FROM Orders o WHERE o.CustomerID = cu.CustomerID)
這里面的EXISTS是如何運作呢?子查詢返回的是OrderId字段,可是外面的查詢要找的是CustomerID和CompanyName字段,這兩個字段肯定不在OrderID里面啊,這是如何匹配的呢?MYSQL數據庫
EXISTS用于檢查子查詢是否至少會返回一行數據,該子查詢實際上并不返回任何數據,而是返回值True或False.MYSQL數據庫
EXISTS 指定一個子查詢,檢測行的存在.語法:EXISTS subquery.參數 subquery 是一個受限的 SELECT 語句 (不允許有 COMPUTE 子句和 INTO 關鍵字).結果類型為 Boolean,如果子查詢包含行,則返回 TRUE.MYSQL數據庫
在子查詢中使用 NULL 仍然返回結果集MYSQL數據庫
這個例子在子查詢中指定 NULL,并返回結果集,通過使用 EXISTS 仍取值為 TRUE.MYSQL數據庫
SELECT CategoryName FROM Categories WHERE EXISTS (SELECT NULL) ORDER BY CategoryName ASC
比較使用 EXISTS 和 IN 的查詢MYSQL數據庫
這個例子比較了兩個語義類似的查詢.第一個查詢使用 EXISTS 而第二個查詢使用 IN.注意兩個查詢返回相同的信息.MYSQL數據庫
SELECT DISTINCT pub_name FROM publishers WHERE EXISTS (SELECT * FROM titles WHERE pub_id = publishers.pub_id AND type = 'business')
?比較使用 EXISTS 和 = ANY 的查詢MYSQL數據庫
本示例顯示查找與出版商住在同一城市中的作者的兩種查詢辦法:第一種辦法使用 = ANY,第二種辦法使用 EXISTS.注意這兩種辦法返回相同的信息.MYSQL數據庫
SELECT au_lname, au_fname FROM authors WHERE exists (SELECT * FROM publishers WHERE authors.city = publishers.city)
比較使用 EXISTS 和 IN 的查詢MYSQL數據庫
本示例所示查詢查找由位于以字母 B 開頭的城市中的任一出版商出版的書名:MYSQL數據庫
SELECT title FROM titles WHERE EXISTS (SELECT * FROM publishers WHERE pub_id = titles.pub_id AND city LIKE 'B%')
使用 NOT EXISTSMYSQL數據庫
NOT EXISTS 的作用與 EXISTS 正相反.如果子查詢沒有返回行,則滿足 NOT EXISTS 中的 WHERE 子句.本示例查找不出版商業書籍的出版商的名稱:MYSQL數據庫
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 語句:MYSQL數據庫
select distinct 姓名 from xs where not exists ( select * from kc where not exists ( select * from xs_kc where 學號=xs.學號 and 課程號=kc.課程號 )
把最外層的查詢xs里的數據一行一行的做里層的子查詢.MYSQL數據庫
中間的 exists 語句只做出對上一層的返回 true 或 false,因為查詢的條件都在 where 學號=xs.學號 and 課程號=kc.課程號這句話里.每一個 exists 都會有一行值.它只是告訴一層,最外層的查詢條件在這里成立或都不成立,返回的時候值也一樣回返回上去.直到最高層的時候如果是 true(真)就返回到結果集.為 false(假)丟棄.MYSQL數據庫
where not exists select * from xs_kc where 學號=xs.學號 and 課程號=kc.課程號
這個 exists 就是告訴上一層,這一行語句在我這里不成立.因為他不是最高層,所以還要繼續向上返回.MYSQL數據庫
select distinct 姓名 from xs where not exists (這里的 exists 語句收到上一個為 false 的值.他在判斷一下,結果就是為 true(成立),由于是最高層所以就會把這行的結果(這里指的是查詢條件)返回到結果集.MYSQL數據庫
幾個重要的點:MYSQL數據庫
感謝閱讀,希望能贊助到大家,謝謝大家對本站的支持!MYSQL數據庫
維易PHP培訓學院每天發布《Mysql必讀MySQL exists 和in 詳解及區別》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。