not in 和not exists的区别
时间: 2023-05-21 21:05:50 浏览: 138
not in 和not exists在SQL查询中的用法不同。not in用于检查一个值是否不在一个给定的列表中,而not exists用于检查一个子查询的结果是否为空。如果一个值不存在于一个列表中,not in会返回true,而如果一个子查询的结果为空,not exists会返回true。
相关问题
mysql中not in 和not exists区别
MySQL中`NOT IN`和`NOT EXISTS`这两个关键字用于从结果集中排除特定的值或行,它们的区别在于查询的方式:
1. `NOT IN`:当你想排除一组具体的值时,可以使用`NOT IN`。它会返回所有不在指定列表中的记录。例如:
```
SELECT * FROM table_name WHERE column_name NOT IN (value1, value2, ...);
```
这将返回`column_name`字段中不包含`value1`, `value2`等任何提供的值的所有记录。
2. `NOT EXISTS`:这个关键词则用于检查是否存在某个条件下的行。它基于的是子查询的结果,如果子查询中的某行不存在于主表中,则满足`NOT EXISTS`。例如:
```
SELECT * FROM table1 WHERE NOT EXISTS (SELECT * FROM table2 WHERE table1.id = table2.id);
```
这将返回table1中,没有对应id在table2中存在的所有记录。
总结一下:
- `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 ]
阅读全文