一、
1、NULL是无类型的,或可以是任意类型的值
2、可以通过SET NULL TEXT设置SQL*PLUS中NULL显示为指定的值。
SET NULL UNKNOWN;
3、任何和NULL的比较操作(>,<,=等)都返回空行,算术操作(+,-,*,/)的结果还是NULL
4、||,CONCAT会忽略NULL
二、NULL与函数
1、NVL(EXPR1,EXPR2)
2、NVL2(EXPR1,EXPR2,EXPR3)
3、NULLIF(EXPR1,EXPR2) 判断expr1和expr2是否相等,若相等返回NULL,否则返回expr1
注:1)'ab'和'ab '是相等的 2)expr1不可以是字面量NULL,但可以是来自表中的NULL,因为是有类型的
4、COALESCE(expr1,expr2,...,exprn)
从左到右返回返回第一个非NULL值,若均为NULL,则返回NULL
注:要求参数为同一类型簇
5、CASE 和 DECODE
1)
SELECT CASE WHEN ID<5
THEN ' <5'
WHEN ID<8
THEN ' <8'
ELSE ' >=8'
END
FROM T
2)DECODE函数常见用途:按字段内容分组,按字段内容排序,固定行转列
----按字段内容分组
SELECT DECODE(AAC008,'11','就业','12','就业','13','就业','14','就业','15','就业','19','就业',
'30','失业','31','失业','32','失业','33','失业','34','失业','39','失业',
'40','离退休','41','离退休','42','离退休',
'01','劳动力资源','20','劳动力资源',
'其他'),COUNT(1) rs
FROM AC01
GROUP BY DECODE(AAC008,'11','就业','12','就业','13','就业','14','就业','15','就业','19','就业',
'30','失业','31','失业','32','失业','33','失业','34','失业','39','失业',
'40','离退休','41','离退休','42','离退休',
'01','劳动力资源','20','劳动力资源',
'其他');
----按字段内容排序
中文转数字后排序 DECODE(column_name,'张三','1','李四','2')
----固定行转列
WITH temp AS (
SELECT DECODE(aac008,'11','就业','12','就业','13','就业','14','就业','15','就业','19','就业',
'30','失业','31','失业','32','失业','33','失业','34','失业','39','失业',
'40','离退休','41','离退休','42','离退休',
'01','劳动力资源','20','劳动力资源',
'其他') ryzt,COUNT(1) rs
FROM AC01
GROUP BY DECODE(aac008,'11','就业','12','就业','13','就业','14','就业','15','就业','19','就业',
'30','失业','31','失业','32','失业','33','失业','34','失业','39','失业',
'40','离退休','41','离退休','42','离退休',
'01','劳动力资源','20','劳动力资源',
'其他') )
SELECT MAX(DECODE(ryzt,'就业',rs)) 就业,
MAX(DECODE(ryzt,'失业',rs)) 失业,
MAX(DECODE(ryzt,'离退休',rs)) 离退休,
MAX(DECODE(ryzt,'劳动力资源',rs)) 劳动力资源,
MAX(DECODE(ryzt,'其他',rs)) 其他
FROM temp ;
三、NULL与索引
1、oracle的B*Tree索引不存储全为NULL的列。如果本来某个列就是NOT NULL的,但是在设计的时候没有加这个约束,可能会导致最终的执行计划较差。
2、实例:如果某列有一些NULL值,但是占得比例很小,希望IS NULL条件能够走索引,但是又不想建立像上面一样的复合索引或增加NOT NULL条件,如何做?
CREATE INDEX idx_t ON t(a,0);
3、实例
比如一个表中某列只有处理和未处理两种状态,对于未处理的占很少,而已处理的往往很多,我们经常查询未处理的,已处理的查询很少,很多历史记录,都希望它走全表扫描。为了节省维护索引的开销,降低索引存储空间,可以对未处理的记录索引,已处理的不存储到索引中,那么可以使用基于函数的索引。
--不为0的自动转为NULL,就进入不了索引了
CREATE INDEX idx_t ON t(DECODE(A,0,0,NULL));
四、NULL和SQL
1、建表的时候NOT NULL和DEFAULT放一起,必须NOT NULL在DEFAULT后面
2、a表中 【(1,aa),(2,bb)】,b表中【(1,aa),(null,bb)】
select * from a where (id,name) not in (select id,name from b);--查询结果为空
因为NOT IN实际上的执行为
select * from a where (id<>1 or name <> aa) and (id <> null or name <> 'bb');
3、NOT IN和NOT EXISTS不是等价的
4、集合处理UNION,INTERSECT,MINUS,分组语句认为NULL是相等的
5、GROUP BY ID NULLS FIRST
GROUP BY ID NULLS LAST
五、NULL和PL/SQL
1、NULL是PL/SQL Boolean类型的第三个值
2、EXECUTE IMMEDIATE v_sql USING vbirth;--vsql vbirth变量
3、start_time := DBMS_UTILITY.get_time;--start_time变量
4、PL/SQL中的NULL语句
作用:提高程序可读性、和GOTO配合使用
1)
IF condition THEN
do something;
ELSE
NULL;
END IF;
2)
...
BEGIN
...
IF condition THEN
GOTO endprc;
END IF;
...
<<endprc>>
NULL;
END;
分享到:
相关推荐
Oracle SQL 判断值为空OrNull 判断 Oracle SQL 中判断值为空或 Null 的方法有多种,在本文中,我们将介绍 Oracle 和 SQL Server 中的空值判断方法。 Oracle 中的空值判断 在 Oracle 中,可以使用 `NVL` 函数来...
- **7 (NULL)**:空类型。 - **8 (保留)**:保留未使用。 - **9 (ABORT)**:中止类型。 - **10 (保留)**:保留未使用。 - **11 (RESEND)**:重新发送类型。 - **12 (MARKER)**:标记类型。 - **13 (ATTENTION)**:...
约束包括NOT NULL(非空约束)、UNIQUE(唯一约束)、PRIMARY KEY(主键约束)和FOREIGN KEY(外键约束)。 4. SQL查询:SQL(结构化查询语言)是与Oracle交互的主要工具,包括SELECT语句用于查询数据,INSERT用于...
以上内容详细介绍了Oracle SQL中的SELECT语句及其相关操作,包括基本语法、数学表达式、NULL处理、别名设置、字符串拼接、条件限制以及排序等方面的知识点。这些知识点是学习和掌握Oracle SQL的重要基础,能够帮助...
你是否也为在Oracle里如何实现NULL的比较而犯愁呢?
- `NULL`: 表示数据未知或未定义。 Oracle数据库还支持PL/SQL复合类型,如记录(Record)和表类型(Table),以及集合类型,如关联数组(Associative Array)。这些类型使得在数据库中进行复杂的逻辑操作变得更加...
在Oracle数据库系统中,多表查询是日常数据处理的关键技能,尤其对于大型企业级应用来说,数据往往分散在多个关联的表中。本篇将深入探讨Oracle中的多表查询技术,包括基本概念、联接类型、子查询以及高级查询技巧。...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其强大的功能和灵活性使得它在企业级应用中占据了重要地位。本资料“oracle-funcation.rar_oracle”聚焦于Oracle数据库中的常用功能函数,旨在帮助用户理解...
在Oracle数据库中,树结构查询是一种常见的数据操作方式,特别是在处理层次关系的数据时。Oracle提供了一种称为“连接查询”(Connect By)的特有语法,使得我们可以方便地对具有层级关系的数据进行检索。本资料...
### Oracle-POI上传:利用POI插件实现EXCEL与ORACLE的上传与下载 在实际工作中,经常需要将Excel文件中的数据批量导入到Oracle数据库中,这不仅可以提高工作效率,还能减少人为错误。Apache POI库是Java编程语言的...
- **IS NULL 操作符**: 用于检查列是否为空。 #### 十、数据库启动的步骤 **知识点:** 1. **启动实例** (Start an instance): 初始化Oracle实例。 2. **挂载数据库** (Mount the Database): 加载控制文件并打开...
### ORACLE-基于包的存储过程动态分页 在Oracle数据库中实现动态分页功能时,通常会采用存储过程的方式来进行。本篇文章介绍了一个具体的基于包的存储过程实现方案,该方案可以实现在不知道具体表结构的情况下进行...
- **完整性约束**:包括NOT NULL、UNIQUE、FOREIGN KEY、PRIMARY KEY和CHECK等,这些约束确保数据的一致性和准确性。 - **触发器**:数据库级别的程序,当满足特定条件时自动执行,常用于维护数据的完整性,如在...
此外,两个系统在处理空值(NULL)和默认值方面也略有不同,这可能影响到数据迁移和查询编写。Oracle允许为列指定默认值,而DB2也有类似的机制,但它们的语法和处理方式可能不完全一致。 总的来说,理解Oracle和DB2...
### ORACLE-分区表的用法 #### 1. 表空间及分区表的概念 - **表空间**:表空间是Oracle数据库中的基本存储单元,它由一个或多个数据文件组成,用于存储数据库中的所有数据对象(如表、索引等)。在Oracle中,所有...
"Oracle null 的使用" Oracle null 的使用是 Oracle 开发中一个非常重要的概念。_null 是一个特殊的值,表示未知或不存在的值。在 Oracle 中,null 与 0、空字符串、空格不同,它们是不同的概念。 认识 null 在 ...
1. **内置函数**:这是Oracle提供的一些基本操作,如`NULL`检查(`IS NULL`或`IS NOT NULL`)和类型转换函数(`TO_CHAR`, `TO_DATE`, `TO_NUMBER`)。 2. **数学函数**:包括加减乘除(`+`, `-`, `*`, `/`)、幂...
在Oracle中,`NULL`表示未知或无值,不同于0或空字符串。在处理`NULL`时,需要特别注意,因为它不遵循常规的算术和比较运算规则。例如,任何值与`NULL`的比较都会返回`NULL`,而不是真或假。 "折扣方案保存判断的...
根据提供的文件信息,我们可以深入分析Oracle OCP 051考试中的一个具体题目及解析,该题目主要关注的是Oracle数据库中的表创建与约束传递规则。 ### 题目背景 题目给出了SALES、CUSTOMERS、PRODUCTS以及TIMES四个...
### Oracle中的NULL知识点详解 #### 一、NULL基础概念与特性 在Oracle数据库中,`NULL`是一个特殊值,表示未知或未定义的状态。它既不是数字也不是字符,因此不能与其他任何类型的值进行比较。在SQL操作中,NULL的...