百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

oracle的空值介绍(oracle数据为空怎么表示)

mhr18 2024-09-15 21:34 20 浏览 0 评论

在oracle数据库中,空值用来表示实际值未知或无意义的情况. 在一个表中,如果一行中的某列没有值,那么就称它为空值(NULL).任何数据类型的列, 只要没有使用非空(NOT NULL)或主键(PRIMARY KEY)完整性限制, 都 可以出现空值。

一、空值的生成与特点。

如果一列没有非空(NOTNULL)完整性限制,那么其缺省的值为空值,即如果插入一行时未指定该列的值,则其值为空值。

空值具有以下特点:

1)等价于没有任何值。2)与0、空字符串或空格不同。3)在where条件中,Oracle认为结果为NULL的条件为FALSE,带有这样条件的select语句不返回行,并且不返回错误信息。但NULL和FALSE是不同的。4)排序时比其他数据都大。5)空值不能被索引。

二、空值和操作符

1.空值和比较操作符

(1)IS[NOT]NULL:是用来测试空值的唯一操作符(见"空值的测试")。

sal或comm为空值的行,sal>comm比较结果为NULL,所以凡是sal或comm为空值的行都没有返回。

(3)IN和NOTIN操作符

在上述语句中,条件"mgr in (7902,NULL)"等价于mgr=7902 or mgr=NULL。对于表EMP中的任意一行,如果mgr为NULL,则上述条件等价于NULL OR NULL,即为NULL;如果mgr为不等于7902的数值,则上述条件等价于FALSEORNULL,即为NULL;如果mgr等于7902,则上述条件等价于TRUE OR NULL,即为TRUE。所以,最终结果能返回mgr等于7902的行

在上述语句中,条件"deptno not in('10',NULL)"等价于deptno!='10' and deptno!=NULL,对于EMP表中的任意一行,条件的结果只能为NULL或FALSE,所以不返回行。

(4)any,some

条件"sal>any(3000,null)"等价于sal>3000 or sal>null。类似前述(3)第一句,最终结果返回所有sal>3000的行。

(5)All

条件"sal>all(3000,null)"等价于sal>3000 and sal>null,结果只能为NULL或FALSE,所以不返回行。

(6)(not)between

条件"sal between null and 3000"等价于sal>=null and sal<=3000,结果只能为NULL或FALSE,所以不返回行。

2、空值和算术、字符操作符

(1)算术操作符:空值不等价于0,任何含有空值的算术表达式其运算结果都为空值,例如空值加10为空值。

(2)字符操作符||:因为ORACLE目前处理零个字符值的方法与处理空值的方法相同(日后的版本中不一定仍然如此),所以对于||,空值等价于零个字符值。例:

我们可以看到,凡mgr为空值的,ename||mgr结果等于ename;凡是comm为空值的行,sal+comm均为空值。

三、空值和函数

1.空值和度量函数

对于度量函数,如果给定的参数为空值,则其(NVL、TRANSLATE除外)返回值为空值。如下例中的ABS(COMM),如果COMM为空值,ABS(COMM)为空值。

2.空值和组函数

组函数忽略空值。在实际应用中,根据需要可利用nvl函数用零代替空值。例:

第一个SELECT语句忽略COMM为空值的行,第二个SELECT语句使用NVL函数统计了所有的COMM,所以它们统计的个数、平均值都不相同。另外需要注意的是,在利用组函数进行数据处理时,不同的写法具有不同的不同含义,在实际应用中应灵活掌握。例如:

可以看到SUM(SAL+COMM)、SUM(SAL)+SUM(COMM)、SUM(NVL(SAL,0)+NVL(COMM,0))的区别:SUM(SAL+COMM)为先加然后计算各行的和,如果SAL、COMM中有一个为NULL,则该行忽略不计;SUM(SAL)+SUM(COMM)为先计算各行的合计然后再加,SAL、COMM中的NULL都忽略不计,但如果SUM(SAL)、SUM(COMM)二者的结果之中有一个为NULL,则二者之和为NULL;在SUM(NVL(SAL,0)+NVL(COMM,0))里,SAL、COMM中的NULL按0处理。

四、空值的其它特性

1.空值在排序时大于任何值。

2.空值不能被索引。虽然在某列上建立了索引,但是对该列的空值查询来说,因为空值没有被索引,所以不能改善查询的效率。例如下面的查询不能利用在MGR列上创建的索引。

另外正是因为空值不被索引,所以可在含有空值的列上建立唯一性索引(UNIQUEINDEX)。

相关推荐

IT界10倍高效学习法!用这种方式,一年学完清华大学四年的课程

有没有在某一个瞬间,让你放弃学编程刚开始学python时,我找了几十本国内外的python编程书籍学习后,我还是似懂非懂,那些书里面到处都是抽象的概念,复杂的逻辑,这样的书,对于专业开发者来说,在平常...

数据库设计原则:构建高效可靠的数据存储

简介数据库设计是软件开发中至关重要的一环,它决定了数据在系统中的存储方式和组织结构。良好的数据库设计可以提高系统的性能、可靠性和可维护性。本文将介绍一些常见的数据库设计原则,包括范式化、冗余与一致性、...

Deno 操作 Oracle 数据库全解析:从入门到精通的实战指南

在企业级应用开发中,Oracle数据库凭借其强大的功能、高可靠性和安全性,一直是大型系统的首选数据存储方案。Deno作为新一代JavaScript/TypeScript运行时,以安全、高效和现...

APIJSON快速入门-零后端代码,接口所见即所得

1.流程说明一个接口的开发,比如Java用SpringBoot,Mybatis来开发一般来说就像下面这个流程部署上这个项目后,流程变成了这样如果使用apijson-framework,还可进一步简化...

每天从外包系统同步百万数据,用什么方案?Java实战讲解

用户问的是每天从外包系统同步百万数据,用什么方案,还要Java实战讲解。首先,我需要明确用户的需求。他们每天需要处理的数据量是百万级别,这个量级不算特别大,但也要考虑效率和稳定性。可能用户是企业的开发...

SpringBoot条件化配置(@Conditional)全面解析与实战指南

一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...

禁止join,我该怎么办(禁止后不再提示是什么意思)

join是什么SQL中JOIN子句用于把来自两个或多个表的行结合起来。在实际的数据库应用中,经常需要从多个数据表中读取数据,这时就可以使用SQL语句中的连接(JOIN)子句,在两个或多个数据...

Spring IoC Container 原理解析(spring的ioc底层实现原理)

IoC、DI基础概念关于IoC和DI大家都不陌生,我们直接上martinfowler的原文,里面已经有DI的例子和spring的使用示例《InversionofControlContainer...

SUSE再次宣布推出自己的 RHEL 兼容发行版

SUSE再次宣布推出自己的RHEL兼容发行版变色龙牧场主选择了一条新的岩石路线周三12七月2023SUSE正在重新考虑去年初所做的改变:它正在推出自己的RHEL兼容发行版,或者用它的话说...

Seatunnel介绍与datax对比及使用教程

什么是SeatunnelSeaTunnel是一款极简易用、性能卓越的分布式数据集成平台。它以轻量高效的架构设计,为用户提供了一站式数据集成解决方案,可轻松实现跨系统、跨格式的数据实时/批量同步与...

Spring Boot 大屏展示,私活项目,已开源,接私活必备,真香

一款基于代码生成器的低代码平台!前后端分离架构SpringBoot2.x,SpringCloud,AntDesign&Vue,Mybatis-plus,Shiro,JWT,支持微服务。强大的代码生...

互联网大厂后端必看Spring Boot3与Oracle数据库的高效连接全攻略

你是不是在使用SpringBoot3开发项目时,正为连接Oracle数据库而头疼?明明按照常规方法配置,却总是出现各种错误,耗费大量时间却毫无进展?别担心,这篇文章就是为你量身定制的!开发现...

Oracle 和 Microsoft 推出 Oracle Exadata 数据库服务

据oracle网3月20日报道,Oracle宣布在OracleDatabase@Azure的百万兆次级基础设施上全面推出OracleExadata数据库服务。百万兆次级部署选项无需供应...

Oracle数据库中查询最前面的100条数据,三种方法对比

在Oracle数据库中查询最前面的100条数据,可通过多种方法实现,不同方法适用于不同场景和版本。以下是基于当前技术文档的三种核心方案及其适用性分析:一、使用ROWNUM伪列(通用方案,全版本适用...

Oracle数据库中判断字段不为空?(oracle判断字段是否包含数字)

Oracle数据库中如何判断字段不为空在Oracle数据库中,判断字段(列)不为空通常涉及到几种不同的场景和需求。下面是一些常见的方法来检查字段是否不为空:1.使用NVL函数NVL函数可以用来将NU...

取消回复欢迎 发表评论: