数据库中如何表示未知的值呢?答案是使用一个特殊的值,我们称之为空值(null)。空值并不是一个空字符串,而是一个特殊的值。空值就表示该列的值未知。当选择一个包含空值的列时,看到的结果是该列中不包含任何内容。在前面从customers表中查询行时,就已经看到了这一点(或者说根本看不到内容):顾客#4的dob列是空值,顾客#5的phone列也是空值。% b) d* I0 u9 |- q* b
在SELECT语句中,也可以使用IS NULL来检查空值。下面的例子就以“dob列为空”可以检索顾客#4的记录:8 M2 x, s6 A6 {# _; i& V1 K
0 u) h" }9 o7 @
SELECT customer_id,first_name,last_name,dob
" {2 j# U; e Y YFROM customers
# C2 N+ f+ H3 B% tWHERE dob IS NULL;
2 ^. C5 ?8 F, v3 ^: b$ }: }0 [
$ q; x* P, b: X/ ^4 {# r9 z: d( T: w8 X9 n' E
在下面这个例子中,使用的条件是“phone列为空”可以查询出顾客#5的记录:
, K+ A/ Y6 M" Y* Y7 y- o
3 R7 q8 t7 n1 N6 p0 TSELECT customer_id,first_name,last_name,dob
* F/ L, W0 L" Y9 N% z7 `( f1 dFROM customers# p4 v1 y* @) G/ O7 i! j/ Z
WHERE phone IS NULL;
0 L( q0 j/ v* b! n$ R1 a- f
' `$ W0 `6 q/ ]) h. \既然空值不会显示任何内容,那么在检索所有行时又如何区分空值和空字符串呢?答案是使用Oracle内置的一个函数NVL()。NVL()函数可以将空值转换成另外一个可以真正理解的值,NVL()函数可以接受两个参数:列(或者更确切的说是可以返回一个值的任意表达式)和一个值,如果第一个参数是空值,就将其替换成第二个参数的值,下面举例进行说明,NVL()函数将phone列的一个空值转换为字符串“Unknown phone number”
0 I( Z& _) {4 E( w! l3 X
: \' g/ t# x8 c/ _ ~+ }SELECT customer_id,first_name,last_name,dob& d* p! n# Q3 N3 B5 B: r' E% ^
NVL(phone,'Unknown phone number') AS PHONE_NUMBER
8 O. m$ d, a# H" n0 `FROM customers;) J6 v; v( p# ~- m6 K% D( X
8 R" u( @/ |* i8 \1 t- j0 [9 D
NVL()函数除了用于转换包含空值的字符串列之外,还可以用于转换数字列和日期列。* E6 T2 S; c1 C# Z8 i& Q
; N1 z2 m9 l& Z. k5 L
|