Oracle“不等于号”与Nulls的情况(转)

今天突然才发现,Oracle中的“不等于操作符”是忽略null的。

比如,查询comm不等于的300的记录,我会理所当然地使用where comm != 300

预想会返回包含null的不等于300的记录(意识里认为null也是“不等于30”的其中一种情况)。

而实际上,它只返回不为null且不等于300的记录,见如下测试。

使用SCOTT的公共数据测试:

--All data
select * from scott.emp t;

--Not equal 300(Not contain null)
select * from scott.emp t where t.comm != 300;

--Not equal 300(Does contain null)
select * from scott.emp t where t.comm != 300 or t.comm is null;

TEST

只返回comm不为null并且不等于300的记录。

事实上,并不仅仅“不等于号”与Null的关系是如此的,其他操作符也类似,只不过“不等于号”使用场景的特殊性让我们容易发觉此特性。

其中原因在于Null,关于Null的种种情况可见以下Oracle的文档:

http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements005.htm

http://www.cnblogs.com/nick-huang/p/3921605.html

Oracle“不等于号”与Nulls的情况(转)

时间: 2024-10-09 19:52:36

Oracle“不等于号”与Nulls的情况(转)的相关文章

Oracle“不等于号”与Null的情况

今天突然才发现,Oracle中的“不等于操作符”是忽略Null的. 比如,查询comm不等于的300的记录,我会理所当然地使用where comm != 300 预想会返回包含Null的不等于300的记录(意识里认为Null也是“不等于30”的其中一种情况). 而实际上,它只返回不为Null且不等于300的记录,见如下测试. 使用SCOTT的公共数据测试: --All data select * from scott.emp t; --Not equal 300(Not contain null

Oracle中不等于号问题

在Oracle中,不等于号有以下几种方式:<>,!=,^= 测试SQL create table test( id int, name varchar2(10), age int ) insert into test(id,name,age) values(1,'zhangsan',23); insert into test(id,name,age) values(2,'lisi',''); insert into test(id,name,age) values(3,'wangwu',nul

浅析Oracle中的不等于号

前几天碰到一个关于Oracle不等于的问题,最后搜索了一下,发现下面资料,拿来跟大家分享一下,需要的朋友可以参考下 关于Oracle中的不等于号: 在Oracle中, <> != ~= ^= 都是不等于号的意思.都可以使用. 但是奇怪是的, 我想拿出price不是180000的商品时:(price是Number类型的) SELECT id, name FROM product where price<> 180000; 执行这个语句时,priceis null 的记录不出来.也就是

Oracle中奇怪的【不等于号】

Oracle中奇怪的[不等于号] 在Oracle中,不等号有三种:<>,!=,^= 例如: select * from test where name<>'xn'.返回的结果是name不为xn,且name不空的记录.但是这与我们想要得到的结果有出入,因为我们的目的是得到name为xn的全部记录,当然这也包括name为空的记录,所以这些写SQL语句是有问题的.为了解决这个问题,我们可以采用以下两种方案: select * from test where instr(concat(na

Oracle EBS-SQL (PO-16):检查采购订单完成情况统计.sql

select         e.FULL_NAME                                                     采购员,         sum(plla.quantity-plla.QUANTITY_CANCELLED)  订购数量,         sum(plla.Quantity_Received)                           完成数量 ,         round(SUM(plla.Quantity_Receive

Yii2查询语句使用不等于号

Yii2 Active Record查询条件使用不等于号,需要使用到 operator format: [operator, operand1, operand2, ...] 运算符格式: [运算符, 运算对象1, 运算对象2, ...] 演示代码: $details = MovieShows::find()->where(['movie_id'=>$id]) ->andWhere(['location_id'=>$loc_id]) ->andWhere(['<>

查看oracle数据库的大小和空间使用情况

查看oracle数据库的大小和空间使用情况 (2012-06-19 14:44:30) 转载▼ 标签: 杂谈 分类: oracle 1.查看表空间的使用状况 SELECT upper(f.tablespace_name) 表空间名, d.Tot_grootte_Mb "表空间大小(M) ", d.Tot_grootte_Mb - f.total_bytes "已使用空间(M) ", round((d.Tot_grootte_Mb - f.total_bytes) /

oracle多单号的说明

在ORACLE中,单引号有两个作用,一是字符串是由单引号引用,二是转义.单引号的使用是就近配对,即就近原则.而在单引号充当转义角色时相对不好理解 1.从第二个单引号开始被视为转义符,如果第二个单引号后面还有单引号(哪怕只有一个).      select '''' from dual     ----output:' 解释:第二个单引号被作为转义符,第三个单引号被转义,可将sql写成这样更好理解:select ' '' ' from dual ----output:' 2.连接符‘||’导致了新

三个等于号===和两个等于号==的区别

两个等于号是只判断值是否相等: 三个等于号是即判断值是否相等,又判断类型是否一样: 举例: $str="1"; $num=1; if($str==$num){ print_r('true'); }else{ print_r('false'); } if($str===$num){ print_r('true'); }else{ print_r('false'); } 程序的运行结果是: truefalse 因为在执行第一个if时,php将$str字符串类型转换成数值型,与$num比较: