`

Oracle数据库中null的使用详解

 
阅读更多

问:什么是NULL?

  答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零。ORACLE允许任何一种数据类型的字段为空,除了以下两种情况:

  1、主键字段(primary key),

  2、定义时已经加了NOT NULL限制条件的字段。

 

附加说明:

  1、等价于没有任何值、是未知数。

  2、NULL与0、空字符串、空格都不同。

  3、对空值做加、减、乘、除等运算操作,结果仍为空。

  4、NULL的处理使用NVL函数。

  5、比较时使用关键字用“is null”和“is not null”。

  6、空值不能被索引,所以查询时有些符合条件的数据可能查不出来,

  count(*)中,用nvl(列名,0)处理后再查。

  7、排序时比其他数据都大(索引默认是降序排列,小→大),

  所以NULL值总是排在最后。

  使用方法:

 1 SQL> select 1 from dual where null=null;
 2 没有查到记录
 3 SQL> select 1 from dual where null='';
 4 没有查到记录
 5 SQL> select 1 from dual where ''='';
 6 没有查到记录
 7 SQL> select 1 from dual where null is null;
 8         1
 9 ---------
10         1
11 SQL> select 1 from dual where nvl(null,0)=nvl(null,0);
12         1
13 ---------
14         1
15 

对空值做加、减、乘、除等运算操作,结果仍为空。

1 SQL> select 1+null from dual;
2 SQL> select 1-null from dual;
3 SQL> select 1*null from dual;
4 SQL> select 1/null from dual;

  查询到一个记录。

  注:这个记录就是SQL语句中的那个null

  设置某些列为空值

  update table1 set 列1=NULL where 列1 is not null;

  现有一个商品销售表sale,表结构为:

  month  char(6)  ——月份

  sellnumber(10,2) ——月销售金额

 1 create table sale (month char(6),sell number);
 2 insert into sale values('200001',1000);
 3 insert into sale values('200002',1100);
 4 insert into sale values('200003',1200);
 5 insert into sale values('200004',1300);
 6 insert into sale values('200005',1400);
 7 insert into sale values('200006',1500);
 8 insert into sale values('200007',1600);
 9 insert into sale values('200101',1100);
10 insert into sale values('200202',1200);
11 insert into sale values('200301',1300);
12 insert into sale values('200008',1000);
13 insert into sale(monthvalues('200009');
14          (注意:这条记录的sell值为空)
15 commit;

共输入12条记录,此时我们做如下的查询:

SQL> select * from sale where sell like '%';
MONTH       SELL
------ ---------
200001      1000
200002      1100
200003      1200
200004      1300
200005      1400
200006      1500
200007      1600
200101      1100
200202      1200
200301      1300
200008      1000

  查询到11记录。

  结果说明:

  查询结果说明此SQL语句查询不出列值为NULL的字段

  此时需对字段为NULL的情况另外处理。

SQL> select * from sale where sell like '%' or sell is null;
SQL
> select * from sale where nvl(sell,0like '%';
       
MONTH       SELL
------ ---------
200001      1000
200002      1100
200003      1200
200004      1300
200005      1400
200006      1500
200007      1600
200101      1100
200202      1200
200301      1300
200008      1000
200009

  查询到12记录,Oracle的空值就是这么的用法,我们最好熟悉它的约定,以防查出的结果不正确。

    对于NULL而言还有一个特殊的用法:

select NULL from sale where sell>1500;

    以上语句中并没有什么特殊的含义,它只是想得到是否有符合条件的记录,而不在乎取出什么字段,于是用NULL来代替一下。

  总结:null就是null,和别的类型没有可比性。

分享到:
评论

相关推荐

    Oracle数据库学习指南

    Oracle2: 1. 《Oracle8 优化技术》摘录 (第一章 安装) 2. 《Oracle8 优化技术》摘录 (第二章 ...50. 怎样在SQLPlus中使用 '&' 来实现自定义参数变量? 51. 怎样在查询记录时给记录加锁 52. 自动备份Oracle数据库

    Oracle数据库使用及命名规则的详解

    开始注释,类似JAVAK中的开始注释,主要列出文件名,编写日期,版权说明,程序功能以及修改记录:  REM  REM $Header: filename, version, created date,auther  REM  REM Copyright  REM  REM ...

    Oracle中的分析函数详解

    NULL 博文链接:https://yangkai.iteye.com/blog/754447

    Oracle约束详解.pdf

    1 1 、 e oracle 数据库有 5 5 种约束: :y primary n key,foreign key,unique,check,not null 2 2 、 如果某个约束只作用单独的字段,即可以在列级定义约束;也可以在表 级定义约束。但是如果某个约束作用于多...

    Oracle PL/SQL语言初级教程

    文档目录内容如下: Oracle PL/SQL语言初级教程 1 目录 1 1.PL/SQL语言基础 3 过程 5 包(package) 6 ...在游标FOR循环中使用查询 86 游标中的子查询 86 9.PL/SQL异常处理初步 88 异常传播 91 常用异常处理方法 93

    详解数据库语言中的null值

    主要详解了数据库语言中的null值,针对MySQL上的实例进行讲解,需要的朋友可以参考下

    精通SQL 结构化查询语言详解

    2.3.2 Oracle数据库体系结构  2.3.3 Oracle数据库系统结构 2.3.4 使用SQL*Plus执行SQL语句 2.4 PL/SQL简介  2.4.1 PL/SQL的特点  2.4.2 PL/SQL程序结构 第3章 创建、修改和删除表 3.1 表的基础知识  ...

    Oracle call 和 exec的详解及区别

    exec是sqlplus的命令,只能在sqlplus中使用。 call是sql命令,任何工具都可以使用,call必须有括号,即例没有参数  call必须有括号,即例没有参数 idle> connect /as sysdba 已连接。 sys@PO10> sys@PO10> create ...

    精通SQL--结构化查询语言详解

    2.3.1 oracle数据库软件组成 29 2.3.2 oracle数据库体系结构 29 2.3.3 oracle数据库系统结构 30 2.3.4 使用sql*plus执行sql语句 31 2.4 pl/sql简介 32 2.4.1 pl/sql的特点 32 2.4.2 pl/sql程序结构 33 第3章 ...

    深入Mysql,SqlServer,Oracle主键自动增长的设置详解

    1、把主键定义为自动增长标识符类型MySql在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值。例如: 代码如下:create table customers(id int auto_increment primary key not null, name...

    TianleSoftware Oracle中文学习手册

    在Oracle 几年的学习中,做了很多的实验,也遇到了很多的问题, 在这个过程中,积累了一些学习文档。也更新到了blog上。 因为太多,不便于查阅。 根据自己对 Oracle 的理解,把这些 blog 进行了分类,并进行了一些...

    oracle学习经典教程

    1.2.1.6.2 使用IS NULL 或IS NOT NULL ......30 1.2.1.6.3 使用函数.........30 1.2.1.6.4 比较不匹配的数据类型...............30 1.2.1.7 查询索引..................30 1.2.1.8 组合索引..............

    Sql 语句详解

    全网最全的SQL 讲解,带实例描述 目录概要: 1. SQL 简介 3 2. SQL 语法 4 3. SQL SELECT 语句 5 4. SQL WHERE 子句 7 5. SQL AND & OR 运算符 8 6. SQL ORDER BY 子句 9 ...25. SQL NOT NULL 约束 31 ……

    jpivot学习总结.doc

    nullParentValue 如果当前的 Level 是有上下级关系(设置了 parentColumn 属性),如果该 Level 又处于顶级,我们需要将顶级的数据取出来,这里指的是位于顶级的父成员的值,有些数据库不支持 null, 那么也可以使用 ...

Global site tag (gtag.js) - Google Analytics