最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql中EXISTS和IN的使用方法比較

 更新時間:2021年03月12日 09:56:32   作者:槐月十九  
這篇文章主要給大家介紹了關于mysql中EXISTS和IN使用方法比較的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1、使用方式:

(1)EXISTS用法

select a.batchName,a.projectId from ucsc_project_batch a where EXISTS (select b.id from ucsc_project b where a.projectId = b.id)

上面這條SQL的意思就是:以ucsc_project_batch為主表查詢batchName與projectId字段,其中projectId字段存在于ucsc_project表中。

EXISTS 會對外表ucsc_project_batch進行循環(huán)查詢匹配,它不在乎后面的內(nèi)表子查詢的返回值是什么,只在乎有沒有存在返回值,存在返回值,則條件為真,該條數(shù)據(jù)匹配成功,加入查詢結(jié)果集中;如果沒有返回值,條件為假,丟棄該條數(shù)據(jù)。

例如我們這里改變一下子查詢的查詢返回字段,并不影響外查詢的查詢結(jié)果:

select a.batchName,a.projectId from ucsc_project_batch a where EXISTS (select b.companyId,b.name from ucsc_project b where a.projectId = b.id)

(2)IN用法

select a.batchName,a.projectId from ucsc_project_batch a where a.projectId in (select b.id from ucsc_project b)

上面這條SQL的查詢結(jié)果與剛才的EXISTS的結(jié)果一樣,查詢的意思也一樣。

2、注意點:

(1)EXISTS寫法需要注意子查詢中的條件語句一般需要帶上外查詢的表做關聯(lián),不然子查詢的條件可能會一直為真,或者一直為假,外查詢的表進行循環(huán)匹配的時候,要么全部都查詢出來,要么一條也沒有。

select a.batchName,a.projectId from ucsc_project_batch a where EXISTS (select b.id from ucsc_project b)

比如上述這種寫法,由于ucsc_project 表存在值,子查詢的條件一直為真,ucsc_project_batch 每條數(shù)據(jù)進行循環(huán)匹配的時候,都能匹配成功,查詢出來的結(jié)果就成為了ucsc_project_batch整張表數(shù)據(jù)。

select a.batchName,a.projectId from ucsc_project_batch a where EXISTS (select b.id from ucsc_project b where b.id is null)

這種寫法,子查詢肯定查不到結(jié)果,所以子查詢的條件為假,外查詢的每條數(shù)據(jù)匹配失敗,整個查詢結(jié)果為空

(2)IN語句在mysql中沒有參數(shù)個數(shù)的限制,但是mysql中SQL語句有長度大小限制,整段最大為4M

(3)EXISTS的子查詢語句不在乎查詢的是什么,只在乎有沒有結(jié)果集存在,存在則整個子查詢可以看作一個條件為真的語句,不然就是一個條件為假的語句

(4)IN語句對于子查詢的返回字段只能由一個,不然會報錯:

select a.batchName,a.projectId from ucsc_project_batch a where a.projectId in  (select b.id,b.companyId from ucsc_project b)

[Err] 1241 - Operand should contain 1 column(s)

3、場景選擇

外查詢表大,子查詢表小,選擇IN;外查詢表小,子查詢表大,選擇EXISTS;若兩表差不多大,則差不多。

(1)IN中的SQL查詢只會查詢一次,然后把結(jié)果集存在臨時文件中,然后再與外層查詢sql進行匹配,其中外查詢與子查詢都可以使用索引

select a.batchName,a.projectId from ucsc_project_batch a where a.projectId in (select b.id from ucsc_project b)

等價于:

$result = [];
$ucsc_project_batch = "select a.batchName,a.projectId from ucsc_project_batch a";
$ucsc_project = "select b.id from ucsc_project b";
for($i = 0;$i < $ucsc_project_batch .length;$i++){
 for($j = 0;$j < $ucsc_project .length;$j++){
  if($ucsc_project_batch [$i].projectId== $ucsc_project [$j].id){
   $result[] = $ucsc_project_batch [$i];
   break;
  }
 }
}

(2)EXISTS會對外查詢的表ucsc_project_batch 進行循環(huán)匹配,執(zhí)行ucsc_project_batch.length次,其中子查詢可以使用索引,外查詢?nèi)頀呙?/p>

select a.batchName,a.projectId from ucsc_project_batch a where EXISTS (select b.id from ucsc_project b where a.projectId = b.id)

等價于:

$result = [];
$ucsc_project_batch = "select a.batchName,a.projectId from ucsc_project_batch a ";
for ($i = 0; $i < $ucsc_project_batch . length; $i++) {
 if (exists($ucsc_project_batch [$i] . projectId)) {//執(zhí)行select b.id from ucsc_project b where a.projectId=b.id        
  $result[] = $ucsc_project_batch [$i];
 }
}

通過兩個的偽代碼分析可知:子查詢的表大的時候,使用EXISTS可以有效減少總的循環(huán)次數(shù)來提升速度;當外查詢的表大的時候,使用IN可以有效減少對外查詢表循環(huán)遍歷來提升速度。

總結(jié)

到此這篇關于mysql中EXISTS和IN的使用方法比較的文章就介紹到這了,更多相關mysql EXISTS和IN比較內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL查看和優(yōu)化數(shù)據(jù)庫實例詳細信息的命令

    MySQL查看和優(yōu)化數(shù)據(jù)庫實例詳細信息的命令

    本文詳細介紹了如何查看?MySQL?數(shù)據(jù)庫實例的信息,包括基本信息、配置參數(shù)、運行進程和性能監(jiān)控等方面,通過多個代碼示例,讀者可以掌握查看和管理數(shù)據(jù)庫實例的具體操作,這些方法和工具對于數(shù)據(jù)庫管理和維護非常重要,可以幫助我們確保數(shù)據(jù)庫的健康運行
    2024-05-05
  • MySQL中的SHOW FULL PROCESSLIST命令實現(xiàn)

    MySQL中的SHOW FULL PROCESSLIST命令實現(xiàn)

    SHOW FULL PROCESSLIST命令是MySQL中一個非常有用的工具,可以幫助我們理解和監(jiān)控MySQL服務器的狀態(tài),本文主要介紹了MySQL中的SHOW FULL PROCESSLIST命令,感興趣的可以了解一下
    2023-11-11
  • mysql如何讀寫分離監(jiān)控

    mysql如何讀寫分離監(jiān)控

    本文介紹了如何通過Zookeeper對Mycat節(jié)點進行管理和監(jiān)控的詳細步驟,首先通過tar命令安裝Zookeeper,并配置相關文件,接著介紹了如何安裝和配置Mycat-web,包括修改配置文件中的IP地址和解決內(nèi)存不足問題
    2024-11-11
  • Mysql 查詢JSON結(jié)果的相關函數(shù)匯總

    Mysql 查詢JSON結(jié)果的相關函數(shù)匯總

    這篇文章主要介紹了Mysql 查詢 JSON 結(jié)果的相關函數(shù)匯總,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2020-11-11
  • VMWare linux mysql 5.7.13安裝配置教程

    VMWare linux mysql 5.7.13安裝配置教程

    這篇文章主要為大家詳細介紹了VMWare linux mysql 5.7.13安裝配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • MySQL報錯:sql_mode=only_full_group_by的4種輕松解決方法(含舉例)

    MySQL報錯:sql_mode=only_full_group_by的4種輕松解決方法(含舉例)

    今天學mysql函數(shù)的時候在自己服務器上的MySQL碰見了個奇怪的問題,下面這篇文章主要給大家介紹了關于MySQL報錯:sql_mode=only_full_group_by的4種輕松解決方法,需要的朋友可以參考下
    2023-01-01
  • 與MSSQL對比學習MYSQL的心得(六)--函數(shù)

    與MSSQL對比學習MYSQL的心得(六)--函數(shù)

    這一節(jié)主要介紹MYSQL里的函數(shù),MYSQL里的函數(shù)很多,我這里主要介紹MYSQL里有而SQLSERVER沒有的函數(shù)
    2014-08-08
  • MySQL Packet for query is too large 問題及解決方法

    MySQL Packet for query is too large 問題及解決方法

    這篇文章主要介紹了MySQL Packet for query is too large 問題及解決方法,需要的朋友可以參考下
    2018-05-05
  • MySQL監(jiān)控Innodb信息工作流程

    MySQL監(jiān)控Innodb信息工作流程

    這篇文章主要為大家介紹了MySQL監(jiān)控Innodb信息工作流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-02-02
  • Linux下mysql5.6.33安裝配置教程

    Linux下mysql5.6.33安裝配置教程

    這篇文章主要為大家詳細介紹了Linux下mysql5.6.33安裝配置方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04

最新評論

霸州市| 海安县| 应用必备| 阳信县| 饶平县| 抚宁县| 河北省| 清远市| 阜平县| 武乡县| 通辽市| 大同县| 土默特左旗| 黎城县| 北京市| 从江县| 昌乐县| 保德县| 阿克| 依兰县| 乌兰察布市| 香港 | 碌曲县| 德惠市| 宜宾县| 洞头县| 南木林县| 海口市| 永州市| 济阳县| 礼泉县| 襄汾县| 凌源市| 常山县| 大洼县| 定兴县| 中西区| 桓台县| 夏邑县| 甘孜县| 沛县|