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. (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |