java中exists什么意思_SQL中EXISTS和IN的区别?

SQL中的EXISTS和IN子句有什么区别?

我们何时应该使用EXISTS ,何时应该使用IN ?

#1楼

Exists关键字计算true或false,但IN关键字比较相应子查询列中的所有值。 另一个Select 1可以与Exists命令一起使用。 例:

SELECT * FROM Temp1 where exists(select 1 from Temp2 where conditions...)

但IN效率较低,因此Exists速度更快。

#2楼

如果您使用的是IN运算符,则SQL引擎将扫描从内部查询中提取的所有记录。 另一方面,如果我们使用EXISTS,SQL引擎会在找到匹配后立即停止扫描过程。

#3楼

当子查询结果非常大时, EXISTS比IN快得多。

当子查询结果非常小时, IN比EXISTS快。CREATE TABLE t1 (id INT, title VARCHAR(20), someIntCol INT) GO CREATE TABLE t2 (id INT, t1Id INT, someData VARCHAR(20)) GO INSERT INTO t1 SELECT 1, 'title 1', 5 UNION ALL SELECT 2, 'title 2', 5 UNION ALL SELECT 3, 'title 3', 5 UNION ALL SELECT 4, 'title 4', 5 UNION ALL SELECT null, 'title 5', 5 UNION ALL SELECT null, 'title 6', 5 INSERT INTO t2 SELECT 1, 1, 'data 1' UNION ALL SELECT 2, 1, 'data 2' UNION ALL SELECT 3, 2, 'data 3' UNION ALL SELECT 4, 3, 'data 4' UNION ALL SELECT 5, 3, 'data 5' UNION ALL SELECT 6, 3, 'data 6' UNION ALL SELECT 7, 4, 'data 7' UNION ALL SELECT 8, null, 'data 8' UNION ALL SELECT 9, 6, 'data 9' UNION ALL SELECT 10, 6, 'data 10' UNION ALL SELECT 11, 8, 'data 11'

查询1SELECT FROM t1 WHERE not EXISTS (SELECT * FROM t2 WHERE t1.id = t2.t1id)

查询2SELECT t1.* FROM t1 WHERE t1.id not in (SELECT t2.t1id FROM t2 )

如果在t1你的id有空值,那么查询1将找到它们,但是查询2无法找到空参数。

我的意思是IN无法与null进行比较,因此它没有null的结果,但是EXISTS可以将所有内容与null进行比较。

#4楼

如果子查询返回多个值,则可能需要执行外部查询 - 如果条件中指定的列中的值与子查询的结果集中的任何值匹配。 要执行此任务,您需要使用in关键字。

您可以使用子查询来检查是否存在一组记录。 为此,您需要将exists子句与子查询一起使用。 exists关键字始终返回true或false值。

#5楼

EXISTS的性能比IN快。 如果大多数过滤条件都在子查询中,那么最好使用IN,如果大多数过滤条件都在主查询中,那么最好使用EXISTS。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值