【发布时间】:2017-05-21 03:14:46
【问题描述】:
最近碰巧在Sql Server和Oracle中遇到了not()。尝试了不同的示例,将 NOT 条件和 not() 与不同的运算符(如 LIKE、IN 等)进行比较。我看不出结果集和记录计数有任何差异,但想与社区确认这两者是否都在做同样的事情或任何警告?
示例查询
select count(*) from Emp where country not in ('ENGLAND UK', 'HAITI', 'IRELAND')
select count(*) from Emp where not(country in ('ENGLAND UK', 'HAITI', 'IRELAND'))
【问题讨论】:
-
在SQL Server中,可以让服务器生成执行计划。然后,您可以比较这两个查询的执行计划并查看它们是否相同。 Oracle 中有类似的功能,但名称不同。
-
SQL 2014 和 2016:在
IN()子句中使用文字参数列表,SQL 执行计划没有区别。如果涉及 PK 列,则为聚集索引查找,否则为聚集索引扫描。使用子查询和最佳键,它将是两次扫描和一个左反半连接,无论NOT运算符放在哪里都没有区别。
标签: sql sql-server oracle