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值总是排在最后。

使用方法:
SQL> select 1 from dual where null=null;
没有查到记录
SQL> select 1 from dual where null='''';
没有查到记录
SQL> select 1 from dual where ''''='''';
没有查到记录
SQL> select 1 from dual where null is null;
        1
---------
        1
SQL> select 1 from dual where nvl(null,0)=nvl(null,0);
        1
---------
        1
对空值做加、减、乘、除等运算操作,结果仍为空。
SQL> select 1+null from dual;
SQL> select 1-null from dual;
SQL> select 1*null from dual;
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) --月销售金额
create table sale (month char(6),sell number);
insert into sale values(''200001'',1000);
insert into sale values(''200002'',1100);
insert into sale values(''200003'',1200);
insert into sale values(''200004'',1300);
insert into sale values(''200005'',1400);
insert into sale values(''200006'',1500);
insert into sale values(''200007'',1600);
insert into sale values(''200101'',1100);
insert into sale values(''200202'',1200);
insert into sale values(''200301'',1300);
insert into sale values(''200008'',1000);
insert into sale(month) values(''200009'');
         (注意:这条记录的sell值为空)
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,0) 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
200009
      
查询到12记录.
      
Oracle的空值就是这么的用法,我们最好熟悉它的约定,以防查出的结果不正确

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/444614/viewspace-487256/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/444614/viewspace-487256/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle 的 LISTAGG 函数用于将多行数据连接为一行,并使用指定的分隔符分隔每个值。下面是 LISTAGG 函数的语法: ``` LISTAGG (column_name, separator) WITHIN GROUP (ORDER BY column_name) ``` 其,column_name 是要合并的列名,separator 是分隔符。可以使用 WITHIN GROUP 子句指定按照哪个列对结果进行排序。 下面是一个例子,假设有一个表格 employees,其包含员工的姓名和所属部门: ``` +--------+-----------+ | Name | Department | +--------+-----------+ | Alice | HR | | Bob | Finance | | Carol | Finance | | Dave | IT | | Eve | HR | +--------+-----------+ ``` 现在,我们想要将每个部门的员工姓名连接起来,用逗号分隔。可以使用以下语句: ``` SELECT Department, LISTAGG(Name, ',') WITHIN GROUP (ORDER BY Name) AS Employees FROM employees GROUP BY Department; ``` 这将得到以下结果: ``` +-----------+-----------------+ | Department | Employees | +-----------+-----------------+ | HR | Alice,Eve | | Finance | Bob,Carol | | IT | Dave | +-----------+-----------------+ ``` 注意,LISTAGG 函数默认会将 NULL 值排除在外。如果希望将 NULL 值包含在结果,可以使用 WITHIN GROUP 子句的 ON NULL 子句: ``` SELECT Department, LISTAGG(Name, ',') WITHIN GROUP (ORDER BY Name) ON NULL 'None' AS Employees FROM employees GROUP BY Department; ``` 这将得到以下结果: ``` +-----------+-----------------+ | Department | Employees | +-----------+-----------------+ | HR | Alice,Eve | | Finance | Bob,Carol | | IT | Dave | | Sales | None | +-----------+-----------------+ ``` 在这个例子,如果某个部门没有员工,则将结果NULL 值替换为 "None"。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值