`
weishaoxiang
  • 浏览: 96514 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

ORACLE学习笔记系列(8)ORACLE中的空值(NULL)和与空值(NULL)有关的函数

 
阅读更多
 ORACLE学习笔记系列(8)ORACLE中的空值(NULL)和与空值(NULL)有关的函数

 ORACLE中在我们不知道具体有什么数据的时候,也即未知,可以用NULL,称之为空。
 ORACLE中,含有空值的表列长度为零。

 ORACLE允许任何一种数据类型的字段为空,除了以下两种情况:
    a、主键字段(primary key)
    b、定义时已经加了NOT NULL限制条件的字段

与空值(NULL)有关的情况:
1、NULL等价于没有任何值、是未知数。
2、ORACLE中NULL与0,空字符串,空格,包括NULL与NULL也是不等的。
3、对NULL值做加、减、乘、除等运算操作,结果仍为NULL。
4、NULL的处理使用 NVL(EXPR1,EXPR2)函数。
5、比较时使用关键字用“IS NULL”和“IS NOT NULL”。
6、空值不能被索引,当指定列来统计数据行数时,NULL值行将被忽略不统计,COUNT(COLUMN1)中不包括COLUMN1为NULL的行。
7、求和SUM(COLUMN1)函数,将忽略COLUMN1为NULL的行,但影响统计结果。
8、排序时比其他数据都大(索引默认是降序排列,小→大),所以NULL值总是排在最后。可以使用“NULLS FIRST”和“NULLS LAST”改变NUUL值的排序。
9、“IN”、“NOT IN”和 子查询中出现空值。
10、使用LIKE模糊查询时,NULL不能被%匹配到。
11、ORACLE中与空值(NULL)有关的函数。


--1
SELECT NULL, '', '  ', 0 FROM DUAL;

--2
SELECT 'NULL=NULL' AS T, COUNT(*) AS C FROM DUAL WHERE NULL = NULL;
SELECT 'NULL=''''' AS T, COUNT(*) AS C FROM DUAL WHERE NULL = '';
SELECT 'NULL=0' AS T, COUNT(*) AS C FROM DUAL WHERE NULL = 0;
SELECT '''''=''''' AS T, COUNT(*) AS C FROM DUAL WHERE '' = '';
SELECT 'a!=null' AS T, COUNT(*) AS C FROM DUAL WHERE 'a' != NULL;
SELECT 'a=a' AS T, COUNT(*) AS C FROM DUAL WHERE 'a' = 'a';
 
--3
SELECT 1 + NULL, 1 - NULL, 1 * NULL, 1 / NULL FROM DUAL;
SELECT '1 + NULL IS NULL' AS T, COUNT(*) AS C FROM DUAL WHERE 1 + NULL IS NULL;
SELECT '1 - NULL IS NULL' AS T, COUNT(*) AS C FROM DUAL WHERE 1 - NULL IS NULL;
SELECT '1 * NULL IS NULL' AS T, COUNT(*) AS C FROM DUAL WHERE 1 * NULL IS NULL;
SELECT '1 / NULL IS NULL' AS T, COUNT(*) AS C FROM DUAL WHERE 1 / NULL IS NULL;
  
--4
SELECT NVL(NULL, 1), NVL(NULL, 'a'), NVL(NULL, SYSDATE), NVL('a', 1) FROM DUAL;

--5
SELECT 'NULL IS NULL' AS T, COUNT(*) AS C FROM DUAL WHERE NULL IS NULL;
SELECT ''''' IS NULL' AS T, COUNT(*) AS C FROM DUAL WHERE '' IS NULL;
SELECT 'NVL IS NOT NULL' AS T, COUNT(*) AS C FROM DUAL WHERE NVL(NULL, 0) IS NOT NULL;

--6
SELECT COUNT(*), COUNT(1), COUNT(NULL), COUNT(NVL(NULL, 0)) FROM DUAL;
 
--7
SELECT COUNT(*), SUM(1), SUM(LEVEL), SUM(NVL(NULL, 0)) FROM DUAL CONNECT BY LEVEL <= 4;

--8
SELECT * FROM B ORDER BY NAME NULLS FIRST;
SELECT * FROM B ORDER BY NAME NULLS LAST;

--9
SELECT 'a=a' AS T, COUNT(*) AS C FROM DUAL WHERE 'a' = (NULL);
SELECT 'a=a' AS T, COUNT(*) AS C FROM DUAL WHERE 'a' IN (NULL);
SELECT 'a=a' AS T, COUNT(*) AS C FROM DUAL WHERE 'a' IN ('a', NULL);

SELECT 'a=a' AS T, COUNT(*) AS C FROM DUAL WHERE 'b' = (NULL);
SELECT 'a=a' AS T, COUNT(*) AS C FROM DUAL WHERE 'b' NOT IN (NULL);
SELECT 'a=a' AS T, COUNT(*) AS C FROM DUAL WHERE 'b' NOT IN ('a', NULL);

SELECT 'a=a' AS T, COUNT(*) AS C FROM DUAL WHERE 'a' = (SELECT NULL FROM DUAL);
SELECT 'a=a' AS T, COUNT(*) AS C FROM DUAL WHERE 'a' IN (SELECT NULL FROM DUAL);
SELECT 'a=a' AS T, COUNT(*) AS C FROM DUAL WHERE 'a' NOT IN (SELECT NULL FROM DUAL);

--10 
SELECT 'NULL LIKE %' AS T, COUNT(*) AS C FROM DUAL WHERE NULL LIKE '%';
 

--11 ORACLE中与空值(NULL)有关的函数

(1)NVL
格式:NVL(EXPR1,EXPR2) 
等价于: (CASE WHEN EXPR1 IS NULL THEN EXPR2 ELSE EXPR1 END)
说明:NVL(EXPR1,EXPR2) EXPR1为NULL时,取EXPR2的值,否则取EXPR1的值;
使用限制:可以用于SELECT子句和WHERE子句中;
          EXPR1,EXPR2 数据类型可以不相同;

(2)NVL2 
格式:NVL2(EXPR1,EXPR2,EXPR3) 
等价于: (CASE WHEN EXPR1 IS NULL THEN EXPR3 ELSE EXPR2 END) 
说明:NVL2(EXPR1,EXPR2,EXPR3) EXPR1为null时,取EXPR3的值,否则取EXPR1的值;        
使用限制:expr1可以是任意类型,expr2,expr3不能是long类型。
          如果 expr2是字符类型,那么expr3转为字符型再比较(null除外)。
          如果 expr2是数值类型,那么expr3也转为对应的数值类型。
          各个参数都不能是逻辑表达式。

(3)NULLIF 
格式: NULLIF(EXPR1,EXPR2) 
等价于:(CASE WHEN EXPR1=EXPR2 THEN NULL ELSE EXPR1 END) 
说明:NULLIF(EXPR1,EXPR2) 如果EXPR1和EXPR2相等,返回 NULL,否则返回EXPR1;如果EXPR1和EXPR2有一个为NULL时,返回NULL;
使用限制:expr1不能是标识符null,录入nullif(null,expr2)那么会提示错误。
          expr1,expr2 都必须是一个变量或者是一个常量表达式,不能是逻辑表达式。
       
(4)LNNVL
格式: LNNVL(EXPR1)  EXPR1是一个表达式
等价于:假设a number(10);lnnvl(a>10) 等价于 nvl(a,0)<=10;等价于  a<=10 or a is null;
说明:如果EXPR1的结果是false或者是unknown,那么lnnvl返回true;如果EXPR1的结果是true,返回false;
使用限制:表达式的操作符号不能包含 AND, OR,  BETWEEN;

(5)COALESCE
格式:COALESCE(EXPR_1,EXPR_2, ……,EXPR_n) 
等价于:(CASE WHEN EXPR_1 IS NULL THEN (CASE WHEN EXPR_2 IS NULL THEN (……,EXPR_n) ELSE EXPR_2 END) ELSE EXPR_1 END)
说明:从左到右返回第一个不为NULL的值;
使用限制:EXPR_1至EXPR_n的数据类型必须一致;
  

SELECT NVL('G', 5),
       NVL(NULL, 5),
       NVL(NULL, SYSDATE),
       
       NVL2(NULL, 2, '3'),
       NVL2(0, 'a', 'b'),
       
       --NULLIF(NULL, 1),
       NULLIF(1, 1),
       NULLIF(1, 2),
       NULLIF('a', 'b'),
       
       (CASE
         WHEN LNNVL('a' = 'x1') THEN
          'a=x1:true'
         ELSE
          'a=x1:false'
       END),
       
       COALESCE(NULL, '', '3', 'a')

  FROM DUAL;

 

分享到:
评论

相关推荐

    oracle 学习笔记

    5. 空值null需要特别处理,在SQL中有专门的函数nvl来处理。 6. 拼接运算符“||”用于将多个字符串连接成一个字符串。 7. 文字字符串用于表示文本数据。 8. 使用DISTINCT关键字可以消除查询结果中的重复行。 9. ...

    Oracle学习笔记(一天就可以学会,学不会你骂我)

    Oracle学习笔记:一天掌握核心概念 Oracle数据库系统是全球广泛使用的数据库管理系统之一,以其高效、稳定和可扩展性而著称。本教程旨在帮助你快速理解Oracle的基本概念和操作,让你在一天之内能够掌握关键知识。 ...

    Oracle学习笔记_(PDF版)

    ### Oracle学习笔记要点 #### 一、SQL Plus的使用方法 - **命令行方式**: 在命令行中直接输入 `sqlplus` 命令,并随后输入用户名和密码。 - **客户端方式**: 使用Oracle提供的SQL Plus客户端工具进行登录。 - **Web...

    02_oracle学习笔记第一天

    以上是对标题“02_oracle学习笔记第一天”中提到的基本查询、多行查询、组函数等内容的知识点总结与扩展。这些基础概念和技术对于初学者来说至关重要,是掌握 Oracle 数据库管理和开发技能的关键步骤。

    Oracle学习笔记1.docx

    Oracle 学习笔记 1 本文档涵盖了 Oracle 学习的基础知识,包括客户端工具、用户管理、表结构、SELECT 语句、DISTINCT 操作、WHERE 子句、ORDER BY 子句和 SQL 函数等内容。 客户端工具 Oracle 提供了多种客户端...

    Oracle学习笔记.doc

    ### Oracle学习笔记知识点详解 #### 一、SQL概述与Oracle简介 - **SQL**(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准语言。它被用来执行各种数据库操作,如查询数据、更新数据...

    oracle学习笔记

    总的来说,Oracle学习涉及众多概念和技术,从基础的数据库连接、SQL语法,到复杂的查询优化和空值处理,都需要逐步掌握。对于初学者来说,这个过程可能会有些挑战,但只要坚持练习,逐步积累,就能成为Oracle数据库...

    Oracle学习笔记第一册

    Oracle学习笔记第一册主要涵盖...以上就是Oracle学习笔记第一册中涉及的主要内容,这些基础概念和操作是掌握Oracle数据库管理与开发的基石。通过不断练习和深入学习,可以进一步掌握更复杂的SQL查询和数据库管理技巧。

    Oracle查询操作的学习笔记

    ### Oracle查询操作学习笔记知识点详解 #### 一、Oracle用户管理与权限分配 ...以上是关于Oracle查询操作的学习笔记中的核心知识点汇总,希望能够帮助初学者更好地理解和掌握Oracle数据库的基础知识。

    Oracle学习笔记——day03

    在Oracle数据库的学习中,第三天的内容主要涵盖了字符类型、数值类型、日期类型以及表的约束。下面我们将逐一详细探讨这些知识点。 首先,我们来看字符类型。Oracle提供了三种基本的字符类型:`CHAR`、`VARCHAR`和`...

    最全的ORACLE-SQL笔记

    【Oracle SQL笔记详解】 Oracle SQL是用于访问和操作Oracle数据库的强大工具,涵盖了各种查询、更新和管理数据的方法。以下是对笔记中提及的一些关键...学习并掌握这些知识,对于有效管理和操作Oracle数据库至关重要。

    oracle完整学习笔记

    在处理空值(NULL)时,需要注意它们在比较操作中的特殊性。例如,`NOT IN`可能会因为NULL的存在而产生意外的结果。在实际应用中,我们需要根据业务需求正确处理NULL值,以确保查询的准确性。 Oracle SQL还提供了...

    oracle简单笔记

    ### Oracle简明学习笔记 #### 数据类型与字符串处理 在Oracle数据库中,了解基础的数据类型对于数据管理和查询至关重要。`CHAR(n)`代表定长字符串,适用于存储固定长度的文本信息,例如电话号码;`VARCHAR(n)`和`...

    Oracle经典学习笔记

    从给定的“Oracle经典学习笔记”中,我们可以提炼出一系列关键的Oracle数据库操作与查询技巧,涵盖了SQL语言的基础到进阶用法。下面将详细解释这些知识点: ### SQL Plus登录与用户管理 - **登录SQL Plus:** 使用...

    Oracle学习笔记

    以下是一些Oracle学习笔记中的关键知识点: 1. **远程访问Oracle数据库**:你可以通过URL `http://127.0.0.1:5560/isqlplus/` 来访问Oracle数据库,不论是自己的还是他人的,这表明Oracle提供了Web接口来操作数据库...

    oracle学习笔记(尚学堂版)

    本篇Oracle学习笔记主要由尚学堂马士兵老师的教学内容整理而成,旨在为初学者提供一个系统的学习框架与实践指南。通过以下知识点的梳理,我们可以更好地理解Oracle数据库的基础操作与SQL语言的应用。 #### SQL基础...

    马士兵oracle笔记

    Oracle数据库是世界上最广泛使用的数据库管理系统之一,主要用于存储和管理企业级的数据...在实际应用中,还需要学习更复杂的查询技巧,如联接、子查询、聚合函数、窗口函数等,以及更深入的数据库管理和性能优化知识。

Global site tag (gtag.js) - Google Analytics