一、
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` 函数来...
你是否也为在Oracle里如何实现NULL的比较而犯愁呢?
NULL 博文链接:https://wangjingyi.iteye.com/blog/1545090
NULL 博文链接:https://keepwork.iteye.com/blog/1976947
NULL 博文链接:https://vernonchen163.iteye.com/blog/2027904
NULL 博文链接:https://oracle-9i.iteye.com/blog/1047004
NULL 博文链接:https://philip01.iteye.com/blog/316263
介绍oracle开发中关于null的特征、易出问题地方及其解决办法,对于从事oracle开发的成员很有帮助,也可用于培训。
015.sql高级查询_null操作.mp4 016.sql高级查询_in操作.mp4 017.sql高级查询_between-and操作.mp4 018.sql高级查询_like模糊查询.mp4 019.sql高级查询_集合运算.mp4 020.sql高级查询_约束.mp4 021.sql高级查询_关联...
从oracle知识中的一个点考察员工对知识的掌握扎实程度,能及格的就不错了。 都是很常用的功能,但人们不一定掌握。
NULL 博文链接:https://stranger2008.iteye.com/blog/1876010
NULL 博文链接:https://wxz2832840.iteye.com/blog/973330
NULL 博文链接:https://jnh.iteye.com/blog/1731289
NULL 博文链接:https://jbbdoc.iteye.com/blog/381973
Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values ('7839','Mohamed','PLEASE',null,to_date('17/11/81','DD/MM/RR'),'2000',null,'10');Insert into EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL...
关于Oracle中NULL使用的若干实验研究.pdf
主要介绍了mybatis使用char类型字段查询oracle数据库时结果返回null问题的解决方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
Oracle 1z0-051
Oracle ORA 异常处理详解 Oracle 是一个强大的关系数据库管理系统,然而,在使用 Oracle 时,总是会遇到各种错误信息,这些错误信息是Oracle抛出的异常信息,用于提示开发者出现了什么问题。了解这些错误信息是...
null and not null