Oracle中NULL值操作简述

本文探讨了Oracle数据库中NULL值的处理方式,包括四则运算、逻辑运算、聚合运算及内嵌函数对NULL值的影响,并提供了具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个老生常谈的问题,前人已有描述,读者可参考http://www.51cto.com/art/200511/10681.htm(Oracle中null的使用详解)。不过,在实际编写pl/sql语,不小心仍旧会犯错误,有鉴于此,记录下来以便日后查询方便,避免犯低级错误。
本文以Oracle中null值为例,其它数据库如DB2,SQLServer,Sybase等大同小异。

1、四则运算
包含null值的+ - * /二元运算符处理后,输出值仍旧为null。即 1 + null, 1 - null, 1 * null, 1 / null, null + null, ...结果值为null。
    -- 返回结果为NULL值
    SELECT 1 + NULL FROM dual;

2、逻辑运算
包含null值的> < >= <=二元运算符处理后,输出值为false。即 1 > null, 1 < null, 1 >= null, 1 <= null, 1 <> null, null = null, 。
    -- 结果集为空
    SELECT * FROM dual WHERE 1 <> NULL;
若使用IS NULL或者IS NOT NULL判断,则符合预期。1 IS NOT NULL返回true,null is null返回true。
    -- 结果集返回1条记录
    SELECT * FROM dual WHERE 1 is not NULL;

3、聚合运算
若聚合的列全部为null值,则聚合函数输出null值,否则输出非空值的聚合运算结果。
    -- 返回null, null, null, null
    SELECT MAX(c1), MIN(c1), SUM(c1), AVG(c1)
    FROM
    (
        SELECT NULL AS c1 FROM dual
        UNION ALL
        SELECT NULL AS c1 FROM dual
        UNION ALL
        SELECT NULL AS c1 FROM dual
    )
    WHERE 1 = 1;

    -- 返回2, 1, 3, 1.5
    SELECT MAX(c1), MIN(c1), SUM(c1), AVG(c1)
    FROM
    (
        SELECT NULL AS c1 FROM dual
        UNION ALL
        SELECT 1 AS c1 FROM dual
        UNION ALL
        SELECT 2 AS c1 FROM dual
    )
    WHERE 1 = 1;

4、内嵌函数
对null值,调用Oracle内嵌函数(字符串/数值/日期等类型操作函数)基本上全部返回null值。
    -- 返回null, null
    SELECT substr(NULL, 1, 3), to_date(NULL, 'yyyymmdd')
    FROM dual

对一些允许null值的字段进行操作时,要小心了,有时因为不注意导致最终查询结果与预期不一致,这很可能就是没有正确操作null值的原因造成的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值