Nar*_*esh 5 sql sql-server oracle
最近我碰巧遇到了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'))
Run Code Online (Sandbox Code Playgroud)
关键字的两个位置NOT在逻辑上是等效的并且给出相同的结果。NOTbefore 括号表达式反转该表达式的结果,但这是传统的布尔逻辑,而不是特定于 SQL。
在 T-SQL 中,对于您的示例,执行计划在 SQL Server 2014 和 SQL Server 2016 中是相同的(假设:表具有主键并且country未建立索引)。
特别是对于您给出的示例,有一个警告:IN当参数中包含值时,运算符的行为与预期不同NULL。对于 Oracle,请参见此处;
对于 T-SQL,请考虑:
select 1 where 'A' in (null)
Run Code Online (Sandbox Code Playgroud)
这不会返回一行。这看起来微不足道,但是:
select 1 where 'A' not in (null)
Run Code Online (Sandbox Code Playgroud)
该语句也不会返回行。现在我们可以争论,如果我们像这样从逻辑上反转第一个语句的表达式,它肯定应该返回一行:
select 1 where not ('A' in (null))
Run Code Online (Sandbox Code Playgroud)
但事实并非如此,因为IN (NULL)评估结果既不是 true 也不是 false。
| 归档时间: |
|
| 查看次数: |
371 次 |
| 最近记录: |