加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle和MS SQL Server中的NOT条件和NOT()之间有什么区别

发布时间:2021-03-05 21:04:57 所属栏目:站长百科 来源:网络整理
导读:最近我碰巧遇到了Sql Server和Oracle中的not().尝试将NOT条件和not()与不同的运算符(如LIKE,IN等)进行比较的不同示例.我没有看到结果集和记录计数方面的任何差异,但是如果两者都做同样的事情,则希望与社区确认或任何警告? 示例查询 select count(*) from Em

最近我碰巧遇到了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','IRELAND'))

解决方法

NOT关键字的两个展示位置在逻辑上都是等效的,并给出相同的结果.在括号内的表达式之前不会反转该表达式的结果,但这是传统的布尔逻辑,而不是特定于SQL.

在T-SQL中,SQL Server 2014和SQL Server 2016中的执行计划与您的示例相同(假设:表具有主键,而国家/地区未编入索引).

有一点需要注意,特别是您给出的示例:当IN运算符的参数中包含NULL值时,IN运算符的行为与预期的不同.对于Oracle,see here;

对于T-SQL,请考虑以下事项:

select 1 where 'A' in (null)

这不会返回一行.这似乎微不足道,但是:

select 1 where 'A' not in (null)

此声明不会返回一行.现在我们可以争辩说,如果我们从第一个语句中逻辑反转表达式,它肯定会返回一行:

select 1 where not ('A' in (null))

但事实并非如此,因为IN(NULL)的计算结果为neither true nor false.

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读