Null 值是一个很特别的值。它既不是0,也不是空格。它的值是没有意义的、未知的、不确定的。 Null 值一般的计算符用的是 ISNULL 和IS NOT NULL 来进行。
升序排序时,Null 排在最后,降序排序时null排在最前。 与NULL参与的算术运算结果均为NULL
逻辑与(AND)算法
在and 逻辑表达式中,只要有F (假)其结果就为F,如果没有F,在AND逻辑表达式中有NULL的其结果就为Null,只有当两个条件都为T时,其结果才为T。
逻辑或(OR) 算法
在OR 逻辑表达式中,只要有T(真)其结果就为T,如果没有T,在OR 逻辑表达式中
有NULL的其结果就为NULL,只有当两个条件都为F时,其结果才为F。
逻辑非(NOT)算法
NOT T =F NOT F=T NOT NULL =NULL
运算符的优先级:
(1)算术运算符 (2)连接运算符 (3)比较(关系)运算符(4)IS NULL、IS NOT NULL、LIKE 、NOT LIKE、IN、NOT IN运算符(5)between 和Not Between运算符(6)Not 逻辑运算符(7)And逻辑运算符(8)OR 逻辑运算符
例如:selectename,job,sal from emp where job=’CLERK’ OR job=’SALEMAN’ AND sal>=1300; 按照运算符优先级,Oracle首先执行由红体部分组成的条件,然后在执行其他条件。
NVL空值转换函数。
因为与Null进行的算术运算均为NULL,所以有此函数。
NVL函数用于把一空值(NULL)转换成某一实际的值,格式如下:
NVL(表达式1,表达式2)
如果表达式1为空值(NULL),NVL返回值为表达式2的值,否则返回表达式1的值。表达式1和表达式2可以为数字型、字符型或日期型,但二者必须一致。例如:
对数字型: NVL(comm,0)
对字符型:NVL (TO_CHAR(comm),’NO Comment’)
对日期型:NVL(hiredate,’31-DEC-99’)
有经验的开发者经常用此函数来避免因空值(NULL )产生的错误。
DECODE 函数
因为SQL中没有逻辑判断语句(分支语句),所以Oracle引入了DECODE函数完成类似的功能。
Oracle的单值函数可以嵌套。函数的计算次序为从里到外。
NVL2 是对NVL 的一个扩充
For exemple: NVL2(comm,’sal+comm’,sal)”income” 首先测试comm,如果comm不为空,就返回表达式sal+comm的值,如果为空返回sal的值;返回值的列标为income
NVL2(表达式1,表达式2,表达式3) 表达式2和表达式3可以是出了LONG以外的任何数据类型,表达式1可以是任何数据类型。如果表达式2和表达式3的数据类型不同,Oracle服务器把表达式3的数据类型转换成表达式2的数据类型;此时如果表达式3为空值,Oracle服务器就不进行数据类型转换。NVL2函数返回值的数据类型与表达式2的数据类型相同。但表达式2的数据类型为定长字符型CHAR时,NVL2函数返回值的数据类型为变长字符型VARCHAR2
NULLIF函数
NULLIF(表达式1,表达式2) 该函数比较两个表达式的值,如果相等就返回NULL,如果不等就返回表达式1 ,在此函数中表达式1不能为NULL