oracle中 null

null在oracle中是很特殊的值,任何类型的值都可以是null.对于不知类型关联的null,字面量null,可以认为他是无类型的

null 和其他任何值都不相等或相等,包括自身,但可以使用is null或者is not null  来进行判断

 

任何和null的比较操作,如<> = <=等都返回unknown

 

oracle对null处理有专门的函数,有nvl  nvl2  nullif  coalesce   decode函数

 SELECT * FROM t;
CREATE TABLE t(a NUMBER,b NUMBER);
CREATE UNIQUE INDEX idx_t ON t(a,b);
INSERT INTO t VALUES(NULL,null);
INSERT INTO t VALUES(1,null);
INSERT INTO t VALUES(NULL,1);
COMMIT;


BEGIN
 DBMS_STATS.GATHER_TABLE_STATS(ownname=>USER,tabname=>'T');
 DBMS_STATS.GATHER_INDEX_STATS(ownname=>USER ,indname=>'IDX_T');
 END;

 

对有的版本不适用

 

 

 

 

create table tt(a number);

insert into tt values(null);

select * from tt;

alter table tt modify a not null;

 

 

如果源表的列式允许null,并且存在null值,那么此列不可修改为not null约束

 

 

 

 

truncate table tt;

insert into tt values(1);

 

alter table tt modify a not null;

 

alter table tt modify a null;

 

如果源表列没有null值,则可以修改为not  null约束,原来是not null约束的修改为null约束也是可以的

 

 

 

drop table tt;

 

create table tt(a number not null default 1,b number);

 

create table tt(a number default 1 not null ,b number);

 

 

建表的时候not null 和default 放在一起,必须not null在default后面

 

 

 

在not in 非相关子查询中注意null

 

 

 

 

 

 

 

create table a(id number not null, b varchar2(10) not null);

create table b(id number ,name varchar2(10) not null);

 

insert into a values(1,'aa');

insert into a values(2,'bb');

insert into b values(1,'aa');

insert into b values(null,'bb');

 

select * from  a where (id,b) not in (select id,name from b );

 

select * from  a where (id,b) not in (select id,name from b where id is not null);

 

集合 分组语句中的null

 

 

 

sql 的集合处理union  intersect   minus是不包含重复行的,如果某列中含有null,其他列相同的则任务是重复行

 

 

 

select null a,null b from dual

union select null ,null from dual

union  select null,1 from dual 

union select null,1 from dual

 

 

 

 

null 是pl/sql  boolean类型的第3个值

pl/sql动态语句中的绑定定量与null

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值