Mysql使用exists的子查詢

2020-12-16 良行

形式:

where exists ( 任何子查詢 )

含義:

該子查詢如果「有數據結果」, 則該exists()的結果為「true」

該子查詢如果「沒有數據結果」,則該exists()的結果為「false」

特別注意:

1,該子查詢,如果其僅僅是為了得到「有沒有數據」的結果,則通常此時對主查詢就失去應用意義;

2,實際上,該子查詢,通常都需要在子查詢(內部)中來使用主查詢(外部)的某些欄位作為條件數據,這樣才能具有一定的實用意義。

其實,這種情況下的子查詢,對於mysql內部,是做了「內連接之後」的結果。

舉例1:

select * from product where exists(

select * from product_type

where product_type.protype_id = product.protype_id

and protype_name like '%碼%'

);

舉例2:

舉例3:

相關焦點

  • MySQL查詢語句中的IN 和Exists 對比分析
    (2)逐行針對tabA表的記錄,去關聯tabB表,判斷tabB表的子查詢是否有返回數據,5.5之後的版本使用Block Nested Loop(Block 嵌套循環)。(3)如果子查詢有返回數據,則將tabA當前記錄返回到結果集。tabA相當於取全表數據遍歷,tabB可以使用到索引。
  • MySQL全面瓦解—子查詢和組合查詢
    4、多行多列(表子查詢):查詢返回的結果是一張臨時表;  按子查詢位置區分   select後的子查詢:僅僅支持標量子查詢,即只能返回一個單值數據。  一般會和下面這幾種方式配合使用:  1)、in子查詢:內層查詢語句僅返回一個數據列,這個數據列的值將供外層查詢語句進行比較。  2)、any子查詢:只要滿足內層子查詢中的任意一個比較條件,就返回一個結果作為外層查詢條件。  3)、all子查詢:內層子查詢返回的結果需同時滿足所有內層查詢條件。
  • 06-mysql基礎-mysql中的DQL-子查詢
    在上一期05-mysql基礎-mysql中的DQL-連接查詢的推文中我們學習了mysql的連接查詢知識,本期我們將繼續學習DQL中的子查詢。子查詢介紹含義:出現在其他語句中的select語句,成為子查詢或內查詢外部的查詢語句,成為主查詢或外查詢分類:按子查詢出現的位置: select後面 僅支持標量子查詢 from後面 支持表子查詢 where或having後面 支持標量子查詢(*) 列子查詢(*) 行子查詢
  • 玩轉Mysql系列 - 第12篇:子查詢(非常重要,高手必備)
    環境:mysql5.7.25,cmd命令中進行演示。本章節非常重要。子查詢 出現在select語句中的select語句,稱為子查詢或內查詢。外部的select查詢語句,稱為主查詢或外查詢。where或having後面,可以使用標量子查詢(單行單列行子查詢)列子查詢(單列多行子查詢)行子查詢(多行多列)特點子查詢放在小括號內。
  • mysql的查詢、子查詢及連接查詢
    order by輸出排序順序否limit要檢索的行數否二、mysql子查詢查詢結果集可以當成表看待。臨時表要使用一個別名。)3、exists型子查詢(把外層sql的結果,拿到內層sql去測試,如果內層的sql成立,則該行取出。內層查詢是exists後的查詢。)
  • 技術分享 | MySQL 子查詢優化
    本文來源:原創投稿*愛可生開源社區出品,原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。有這麼一個 SQL,外查詢 where 子句的 bizCustomerIncoming_id 欄位,和子查詢 where 字句的 cid 欄位都有高效索引,為什麼這個 SQL 執行的非常慢,需要全表掃描?
  • MySQL中EXISTS的用法
    在子查詢中使用 NULL 仍然返回結果集 select * from TableIn where exists(select null)等同於:select * from Table Inin、not in、exists和not exists的區別:先談談in和exists的區別:exists:存在,後面一般都是子查詢,當子查詢返回行數時,exists返回true。
  • Mysql 中 exists 和 in 的區別
    下面將主查詢的表稱為外表;子查詢的表稱為內表。exists 與 in 的區別如下:子查詢使用 exists,會先進行主查詢,將查詢到的每行數據循環帶入子查詢校驗是否存在,過濾出整體的返回數據;子查詢使用 in,會先進行子查詢獲取結果集,然後主查詢匹配子查詢的結果集,返回數據外表內表相對大小情況不一樣時,查詢效率不一樣:兩表大小相當,in 和 exists 差別不大;內表大,用 exists 效率較高;內表小,用 in
  • MySQL高級查詢
    下面是使用子查詢實現的:說明:發現很多表級子查詢的語句,都是可以使用連接查詢實現的,此時推薦使用連接查詢,因為連接查詢的語句更簡潔,邏輯更清晰子查詢中出現的關鍵字帶any關鍵字的子查詢:帶exists關鍵字的子查詢:exists關鍵字後面的參數可以是任意一個子查詢,這個子查詢的作用相當於測試。
  • MySQL 這該死的 「IN (子查詢)」
    一、什麼是子查詢簡而言之,子查詢就是嵌套在主查詢裡的查詢,如:SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);SELECT * FROM t1 JOIN (SELECT * FROM t2 WHERE id%2 = 0) tmp ON t1.id = tmp.ref_id
  • 拿什麼拯救你,我的MySQL子查詢
    mysql的子查詢一直被人所詬病,主要原因是mysql子查詢奉行的是「由外到內」的政策。
  • MySQL 資料庫表上做查詢慢的原因-愛可生
    回憶一下 26 問中,我們的子查詢應使用物化方式,但實際使用了 exists 子句方式,我們猜測這個選擇是在 join 的優化階段做出的。仔細翻一翻,就會找到可疑的部分:上圖中的中文,是從英文翻譯過來的。看上去我們找對了位置。
  • mysql常用sql語句總結
    (嵌套查詢)三種子查詢 :where子查詢、from子查詢、exists子查詢where子查詢先執行where後的語句,得到內層結果。desc ) as tmp group by tmp.articlecategory_id;exists子查詢將主查詢的數據,放到子查詢中做條件驗證,根據驗證結果(TRUE 或 FALSE)來決定主查詢的數據結果是否得以保留。
  • MySQL使用子查詢教程
    大概會從,什麼是子查詢,利用子查詢進行數據篩選,還有就是把子查詢作為計算欄位使用。1.什麼是子查詢以及利用子查詢進行數據過濾在使用子查詢之前你要檢查一下你的餓MySQL版本了。最少4.1,這個子查詢也是在4.1版本之後才引入的功能。
  • SQL中的IN與NOT IN、EXISTS與NOT EXISTS的區別及性能分析
    如果查詢的兩個表大小相當,那麼用in和exists差別不大;如果兩個表中一個較小一個較大,則子查詢表大的用exists,子查詢表小的用in;例如:表A(小表),表B(大表)select * 如果看一下上述兩個select 語句的執行計劃,也會不同,後者使用了hash_aj,所以,請儘量不要使用not in(它會調用子查詢),而儘量使用not exists(它會調用關聯子查詢)。如果子查詢中返回的任意一條記錄含有空值,則查詢將不返回任何記錄。
  • not in與not exists的區別
    如果查詢的兩個表大小相當,那麼用in和exists差別不大;如果兩個表中一個較小一個較大,則子查詢表大的用exists,子查詢表小的用in;例如:表A(小表),表B(大表)select * from A where cc in(select cc from B)  -->效率低
  • 純乾貨 | SQL中的IN與NOT IN、EXISTS與NOT EXISTS的區別及性能分析
    如果查詢的兩個表大小相當,那麼用in和exists差別不大;如果兩個表中一個較小一個較大,則子查詢表大的用exists,子查詢表小的用in;例如:表A(小表),表B(大表)select * 如果看一下上述兩個select 語句的執行計劃,也會不同,後者使用了hash_aj,所以,請儘量不要使用not in(它會調用子查詢),而儘量使用not exists(它會調用關聯子查詢)。如果子查詢中返回的任意一條記錄含有空值,則查詢將不返回任何記錄。
  • SQL 中的 in 與 not in、exists 與 not exists 的區別以及性能分析
    如果查詢的兩個表大小相當,那麼用in和exists差別不大;如果兩個表中一個較小一個較大,則子查詢表大的用exists,子查詢表小的用in;例如:表A(小表),表B(大表)select * 如果看一下上述兩個select 語句的執行計劃,也會不同,後者使用了hash_aj,所以,請儘量不要使用not in(它會調用子查詢),而儘量使用not exists(它會調用關聯子查詢)。如果子查詢中返回的任意一條記錄含有空值,則查詢將不返回任何記錄。
  • SQL中的in與not in、exists與not exists的區別以及性能分析
    如果查詢的兩個表大小相當,那麼用in和exists差別不大;如果兩個表中一個較小一個較大,則子查詢表大的用exists,子查詢表小的用in;例如:表A(小表),表B(大表)select * 如果看一下上述兩個select 語句的執行計劃,也會不同,後者使用了hash_aj,所以,請儘量不要使用not in(它會調用子查詢),而儘量使用not exists(它會調用關聯子查詢)。如果子查詢中返回的任意一條記錄含有空值,則查詢將不返回任何記錄。
  • sql中的in與not in,exists與not exists的區別
    如果查詢的兩個表大小相當,那麼用in和exists差別不大;如果兩個表中一個較小一個較大,則子查詢表大的用exists,子查詢表小的用in;如果看一下上述兩個select 語句的執行計劃,也會不同,後者使用了hash_aj,所以,請儘量不要使用not in(它會調用子查詢),而儘量使用not exists(它會調用關聯子查詢)。如果子查詢中返回的任意一條記錄含有空值,則查詢將不返回任何記錄。如果子查詢欄位有非空限制,這時可以使用not in,並且可以通過提示讓它用hasg_aj或merge_aj連接。