not in和not exists的区别
时间: 2023-04-29 17:03:53 浏览: 69
`NOT IN` 和 `NOT EXISTS` 是在 SQL 中用于过滤查询结果的两种不同的运算符。
`NOT IN` 用于返回不包含在指定子查询或值列表中的行。它在左边的列上检查是否不存在于右边子查询或值列表中。
`NOT EXISTS` 用于返回在另一个查询中不存在相关联的行。 它在左边的查询中检查右边子查询中是否不存在相关联的行。
总而言之, NOT IN 是在值域上操作的,而 NOT EXISTS是在整张表上操作的。
相关问题
not in 和 not exists的区别
在SQL查询中,"not in"和"not exists"都是用于在查询结果中排除特定条件的关键词。但是它们在实现和使用上有一些区别。
1. "not in"是用于排除具有指定值的行,基于给定的列表或子查询。例如,使用"not in"可以排除在一个表中具有特定名称的行,如下所示:
SELECT name FROM student WHERE name NOT IN ('zhang', 'wang', 'zhao');
2. "not exists"是用于排除子查询的结果中存在的行,基于子查询的结果是否为空。如果子查询返回的结果为空,则"not exists"返回true,否则返回false。例如,使用"not exists"可以排除在一个表中具有特定条件的行,如下所示:
SELECT name FROM student s WHERE NOT EXISTS (SELECT 1 FROM other_table o WHERE o.student_id = s.id);
3. 性能方面,"not exists"通常比"not in"更有效率,尤其在外表和内表的大小不一致时。因为"not exists"使用了关联子查询,它会对外表进行循环,再对内表进行查询,而不是对整个结果集进行比较。相比之下,"not in"会将外表和内表进行哈希连接,可能导致性能下降。
所以,区别总结如下:
- "not in"用于排除具有指定值的行,而"not exists"用于排除子查询中存在的行。
- "not exists"通常比"not in"更有效率,特别是在外表和内表大小不一致时。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [not in 和 not exist的区别](https://blog.csdn.net/chuqian0842/article/details/100770034)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
not exists 和 not in 区别
在SQL语言中,"NOT EXISTS"和"NOT IN"是两种用于查询的条件表达式,它们有一些区别。
1. "NOT EXISTS"用于检查子查询的结果是否为空。它的语法如下:
```
SELECT column1, column2, ...
FROM table1
WHERE NOT EXISTS (subquery);
```
如果子查询的结果为空,那么整个条件表达式返回真;如果子查询的结果不为空,那么整个条件表达式返回假。
2. "NOT IN"用于检查某个值是否不在一个给定的列表中。它的语法如下:
```
SELECT column1, column2, ...
FROM table1
WHERE column1 NOT IN (value1, value2, ...);
```
如果列column1的值不在给定的列表中,那么整个条件表达式返回真;如果列column1的值在给定的列表中,那么整个条件表达式返回假。
它们的区别在于:
- "NOT EXISTS"用于检查子查询的结果是否为空,而"NOT IN"用于检查某个值是否不在一个给定的列表中。
- "NOT EXISTS"可以用于复杂的子查询,而"NOT IN"只能用于简单的值列表。
- "NOT EXISTS"通常比"NOT IN"更高效,因为它可以在找到第一个匹配项后停止搜索。