not in 和 not exists的区别
时间: 2023-11-18 14:14:37 浏览: 115
sql in,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 ]
阅读全文