http://www.jianshu.com/p/39dcef831ba2
1、in和exists
in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。如果查询的两个表大小相当,那么用in和exists差别不大;如果两个表中一个较小一个较大,则子查询表大的用exists,子查询表小的用in;
尽管通常不建议在sql语句中使用*, 但在exists子查询中* 可以放心使用。exists只关心行是否存在,而不会去取各列的值。
例如:表A(小表),表B(大表)
select * from A where cc in(select cc from B)
效率低,用到了A表上cc列的索引;
select * from A where exists(select cc from B where cc=A.cc)
效率高,用到了B表上cc列的索引。
相反的:
select * from B where cc in(select cc from A)
效率高,用到了B表上cc列的索引
select * from B where exists(select cc from A where cc=B.cc)
效率低,用到了A表上cc列的索引。
2、not in 和not exists
not in 逻辑上不完全等同于not exists。
当输入列表中包含null值时,not exists 和not in之间的差异就表现出来了。输入列表中包含null,not in 总会返回false 和 unknown。即,null in (‘a’,‘b’,null)返回null, ‘c’ not in (‘a’,‘b’,null)的返回值是null,所以用not in之前要先过滤掉null值。而对于not exists,总是返回true 和 false。
文/GALAXY_ZMY(简书作者)
原文链接:http://www.jianshu.com/p/39dcef831ba2
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
分享到:
相关推荐
SQL 中 IN、EXISTS、NOT IN、NOT EXISTS 的区别 IN、EXISTS、NOT IN、NOT EXISTS 是 SQL 中四种常用的条件判断运算符,它们之间的区别主要体现在使用场景、执行效率和语法结构上。 IN IN 是一种条件判断运算符,...
### SQL里的EXISTS与IN 在SQL查询语言中,`EXISTS` 和 `IN` 子句都是非常常用且重要的操作符,它们被广泛应用于复杂的查询条件中,特别是当需要检查某个子查询是否返回结果时。根据给定的信息,本文将详细解析`...
在SQL查询中,`IN`、`INNER JOIN`、`OUTER JOIN` 和 `EXISTS` 是四个重要的关键字,它们用于处理数据表之间的关联和筛选。这些概念在数据库设计和数据检索中至关重要,理解并熟练运用它们能显著提高查询效率。 1. *...
在SQL查询中,`CASE WHEN`、`EXISTS`、`NOT EXISTS`以及`IN`和`NOT IN`是常用的操作符,它们用于处理复杂的条件判断和数据筛选。这些概念对于理解和编写高效的SQL语句至关重要,尤其是在数据分析和数据库管理中。 `...
在Oracle数据库中,`IN`、`EXISTS`、`NOT IN` 和 `NOT EXISTS` 是四个常用的子查询操作符,它们在SQL查询语句中扮演着不同的角色,且各有其性能特点。以下是对这些操作符的详细分析和比较。 1. `IN` 操作符: `IN` ...
### SQL中EXISTS与IN的区别及应用场景 #### EXISTS详解 **定义与原理** - **基本概念**:`EXISTS` 是 SQL 中的一个谓词,用于判断子查询是否有结果返回,而不是关心具体的返回值。它主要关注子查询是否至少有一行...
SELECT * FROM c t1 WHERE NOT EXISTS (SELECT * FROM c WHERE id = t1.id AND c_date > t1.c_date) ``` 这个查询用来找出每个`id`下`c_date`最新的记录。`NOT EXISTS`在这里的作用是,对于每个`t1.id`,如果子查询...
### Oracle数据库中Exists与In的使用详解 #### 一、Exists 的使用方法 在Oracle数据库中,`EXISTS` 是一种常用的子查询操作符,用于判断子查询是否有结果返回。如果子查询至少返回一行数据,则 `EXISTS` 表达式的...
SELECT SQL_NO_CACHE * FROM rocky_member m WHERE EXISTS (SELECT 1 FROM rocky_vip_appro a WHERE m.ID = a.user_id AND a.passed = 1); ``` 这个查询的执行时间为0.313秒。 2. 使用 `IN`: ```sql SELECT ...
本文将深入探讨EXISTS谓词的工作原理、用法以及其与IN和JOIN操作符的区别。 一、EXISTS谓词的基本概念 EXISTS谓词用于测试一个子查询是否至少返回一行数据,而不是关心返回的具体数据内容。其基本语法结构如下: ...
AND EXISTS ( SELECT * FROM third_table WHERE third_table.another_id = another_table.id ) ); ``` 这个例子展示了如何使用嵌套的 `EXISTS` 子句来检查多个表之间是否存在满足特定条件的记录。 #### 三...
**8.3 Difference between IN and EXISTS** 理解和区分`IN`和`EXISTS`的使用场合对于优化SQL查询性能非常重要。 #### 九、Tuning from Internet 这部分内容涉及到了从互联网上获得的调优技巧和最佳实践。 以上是...
MySQL中的`EXISTS`和`IN`都是在SQL查询中用来检查特定条件是否存在的子查询操作符,但它们的工作方式和适用场景有所不同。下面将详细解释这两个操作符的用法和区别。 ### `EXISTS`操作符 `EXISTS`主要用于判断子...
AND NOT EXISTS ( SELECT 'X' FROM aa WHERE bb.smi_cd = smi_cd ); ``` 这里表示从表 `A1` 中选择所有列,但排除那些 `smi_cd` 为 `NULL` 的记录,同时还要排除那些在表 `aa` 中有相同 `smi_cd` 的记录。 ### ...
例如:`SELECT name FROM student WHERE sex = 'm' AND mark EXISTS (SELECT 1 FROM grade WHERE ...)` 在上面的示例中,EXISTS 子句判断子查询 `SELECT 1 FROM grade WHERE ...` 是否返回记录,如果返回记录,则...
size ts all programming model for concurrency and parallelism exists, and so prematurely committing to one particular paradigm is likely to tilt the language towards favouring certain kinds of problem...
理解`EXISTS`和`NOT EXISTS`的用法对于优化SQL查询非常重要,因为它们通常比使用`IN`或`JOIN`操作符更有效率,特别是在处理大量数据时。`EXISTS`主要关注记录是否存在,而不需要返回具体的值,这使得它在处理复杂...
The reader could see that our goal is to show the link that exists between intelligent systems and image processing. Moreover, it includes some interesting applications in areas like medicine or ...