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‘,null);
insert into test(id,name,age) values(4,‘sunqi‘,27);
insert into test(id,name,age) values(5,‘‘,22);

如图:

字段NAME和AGE都有空值

例1、查询AGE不等于23的数据

select * from test where  age <> 23;

例2、查询NAME不为lisi的数据

select * from test where name != ‘lisi‘;

以上两个例子严格意义上说均不符合我们的要求,因为没有把null值查询出来

null只能通过is null或者is not null来判断,其它操作符与null操作都是false。

最后正确的sql语句为:

select * from test where instr(concat(name,‘xx‘),‘lisi‘) = 0; --查询name字段不等于‘lisi‘的记录
或
select * from test where nvl(name,‘xx‘)<>‘lisi‘; 
select * from test where instr(concat(age,00),23) = 0; --查询age字段不等于23的记录
或
select * from test where nvl(age,00)<>23;

作者:itmyhome

时间: 2024-12-22 19:11:10

Oracle中不等于号问题的相关文章

Oracle中一些常用符号

Oracle的通配符,运算符一般在where条件子句中出现: 运算符: 等于:=.<.<=.>.>=.<> 包含:in.not in. exists.not exists 范围:between...and.not between....and 匹配测试:like.not like Null测试:is null.is not null 布尔链接:and.or.not 通配符: 在where子句中,通配符可与like条件一起使用.在Oracle中: %(百分号): 用来表示

浅析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“不等于号”与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

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

C#中Equals和= =(等于号)的比较)(转载)

C#中Equals和= =(等于号)的比较) 相信很多人都搞不清Equals和 = =的区别,只是零星的懂一点,现在就让我带大家来进行一些剖析 一.           值类型的比较 对于值类型来说  两者比较的都是"内容"是否相同,即 值 是否一样,很显然此时两者是划等号的. 例: int i = 9; int j = 9; Console.WriteLine("Equals和= =(等于号)的比较"); Console.WriteLine("i.Equ

C#中Equals和= =(等于号)的比较)

C#中Equals和= =(等于号)的比较) 相信很多人都搞不清Equals和 = =的区别,只是零星的懂一点,现在就让我带大家来进行一些剖析 一.           值类型的比较 对于值类型来说  两者比较的都是”内容”是否相同,即 值 是否一样,很显然此时两者是划等号的. 例: int i = 9; int j = 9; Console.WriteLine("Equals和= =(等于号)的比较"); Console.WriteLine("i.Equals(j) :&q

[转载]mysql中实现行号,oracle中的rowid

mysql中实现行号需要用到MYSQL的变量,因为MySql木有rownumber. MYSQL中变量定义可以用 set @var=0 或 set @var:=0 可以用=或:=都可以,但是如果变量用在其他语句中,如:select那么必须用:=,因为=会被当作一个比较符号 1 select @rownum:[email protected]+1 as rownum, b.* from (select @rownum:=0) a, b 这个很有用哦,比如要取到排名好多的.

转:Oracle中的rownum不能使用大于&gt;的问题

一.对rownum的说明 关于Oracle 的 rownum 问题,很多资料都说不支持SQL语句中的“>.>=.=.between...and”运算符,只能用如下运算符号“<.<=.!=”, 并非说用“>.>=.=.between..and”时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来. 其实,只要理解好了这个 rownum 伪列的意义就不应该感到惊奇. rowid 与 rownum 虽都被称为伪列,但它们的存在方式是不一样的: r