Oracle中的NULL、’’(空字符串)以及’_’(空格)

Oracle中的NULL、’’(空字符串)以及’_’(空格)

 

在Oracle中使用 null''(空字符串),'_'(空格)时,有没有遇到问题?产生疑惑?

null’’(空字符串)是一个意思

注: 为了便于区分空字符串和空格,下面的示例均以 _ 代表空格

举个例子:

1         --建表
2         create table tbl_a (col_a varchar2(1), col_b int);  
3     
4         --  造数据
5         insert into tbl_a values(‘_’, 1); --  插入空格
6         insert into tbl_a values(‘’, 2); --  插入空字符串
7         insert into tbl_a values(null, 3); --  插入NULL


以上SQL执行成功后,执行 select 来检查:

1   select count(*) from tbl_a; -- 结果是 3 
2   select count(*) from tbl_a where col_a = ‘_’;  -- 结果是 1 
3   select count(*) from tbl_a where col_a = ‘’;  -- 结果是 0 
4   select count(*) from tbl_a where col_a is null; -- 结果是 2 

 


注意: 由于 ‘’ (空串)默认被转换成了 NULL,不能使用 = ‘’ 作为查询条件。也不能用 is ‘’。虽然不会有语法错误,但是不会有结果集返回。 只能用 is null

不等于就是 is not null

进一步验证:

select nvl(col_a, ‘a’) from tbl_a; 



结果:
  NVL(COL_A,’A’)
1  
2 a
3 a

原来,在Oracle中,null’’(空字符串)是一个意思。

 


分析函数与NULL

在使用AVG,MAX,SUM,COUNT等函数时,为NULL的纪录会被忽略。

再插入几条数据:

1 insert into tbl_a values(null, null); --  插入NULL
2 -- 执行成功。
3 -- 再次证明,’’ 被当作了null处理.
4 -- 因为该字段是 int 类型,如果是字符串,执行会报错
5 insert into tbl_a values(‘a’, ‘’); 

 

查看数据:

select * from tbl_a; 

 

结果如下:
COL_A COL_B
_ 1
  2
  3
   
a  

 

_ 代表空格

其余空白处表示 NULL

验证:

1 select AVG(col_b) from tbl_a; -- 结果为 2 ,NULL的纪录行忽略掉了
2 select MAX(col_b) from tbl_a; -- 结果为 3
3 select SUM(col_b) from tbl_a; -- 结果为 6
4 select COUNT(col_b) from tbl_a; -- 结果为 3 
5 select COUNT(col_a) from tbl_a; -- 结果为 2
6 select COUNT(*) from tbl_a; -- 结果为 5 

 

排序时,NULL作为无穷大处理。

select * from tbl_a order by col_b desc ; 


结果如下:
COL_A COL_B
   
a  
  3
  2
_ 1

 

参考:http://blog.csdn.net/weiwenhp/article/details/7035327

 

阅读原文

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109144.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Mac 系统中使用maven 配置环境变量

    Mac 系统中使用maven 配置环境变量Mac系统中配置maven使用Mac系统配置maven环境变量,针对单独用户配置。在~/.bash_profile中配置PATH路径。一、下载maven的zip压缩包下载路径二、配置单独用户的.bash_profile文件1.vim~/.bash_profile2.输入exportMAVEN_HOME=/Users/zhang/Documents/a…

    2022年7月24日
    20
  • navicat注册码怎么获得_navicat永久激活码最新

    navicat注册码怎么获得_navicat永久激活码最新产品适用:Navcat产品+中文版+64位注册机百度网盘链接:https://pan.baidu.com/s/1H49nNga9h0WHWKGWAGy18g提取码:ri5d1、cmd进入注册机目录执行命令navicat-patcher.exe”D:\ProgramFiles\PremiumSoft\NavicatPremium12″(navicate的目录)2、执行…

    2022年10月13日
    42
  • sendfile为什么比read、writer快

    sendfile为什么比read、writer快本文转自: http://www.yanyufly.com/2010/10/22/sendfile为什么比readwrite快/ 在看关于文件IO优化资料时,其中提到了sendfile,man了一下,原理是:由于cp都执行在内核态中,避免用户多次调用的切换以及内存cp,因此性能要高于read()+write().适用于从一个文件读出写到另一个文件(网络Fd也可)#include

    2022年5月18日
    40
  • pytest的assert_java单元测试断言

    pytest的assert_java单元测试断言前言断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了。什么是断言呢?简单来讲就是实际结果和期望结果去对比,符合预期那就测试pass,不符合预期那就测试failed

    2022年7月28日
    8
  • 缓存穿透,缓存击穿,缓存雪崩解决方案分析

    缓存穿透,缓存击穿,缓存雪崩解决方案分析前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。解决方案

    2022年6月30日
    22
  • ** poj Y2K Accounting Bug 2586

    ** poj Y2K Accounting Bug 2586

    2022年1月14日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号