在Oracle中使用null,''(空字符串),'_'(空格)時,有沒有遇到問題?產生疑惑?oracle
一、NULL和''(空字符串)是一個意思函數
注:爲了便於區分空字符串和空格,下面的示例均以'_'表明空格。spa
舉個例子:.net
1 --建表 2 create table tbl_a (col_a varchar2(1), col_b int); 3 4 -- 造數據 5 insert into tbl_a values(‘_’, 1); -- 插入空格 6 insert into tbl_a values(‘’, 2); -- 插入空字符串 7 insert into tbl_a values(null, 3); -- 插入NULL
以上SQL執行成功後,執行select來檢查:3d
1 select count(*) from tbl_a; -- 結果是 3 2 select count(*) from tbl_a where col_a = ‘_’; -- 結果是 1 3 select count(*) from tbl_a where col_a = ‘’; -- 結果是 0 4 select count(*) from tbl_a where col_a is null; -- 結果是 2
注意:因爲''(空字符串)默認被轉換成了NULL,不能使用 = ''做爲查詢條件。也不能用 is ''。雖然不會有語法錯誤,可是不會有結果集返回。只能用is null,不等於就是 is not null。code
進一步驗證:blog
select nvl(col_a, ‘a’) from tbl_a;
結果:排序
原來,在Oracle中,null和''(空字符串)是一個意思。字符串
二、分析函數與NULLget
在使用AVG,MAX,SUM,COUNT等函數時,爲NULL的記錄會被忽略。
再插入幾條數據:
1 insert into tbl_a values(null, null); -- 插入NULL 2 -- 執行成功。 3 -- 再次證實,’’ 被看成了null處理. 4 -- 由於該字段是 int 類型,若是是字符串,執行會報錯 5 insert into tbl_a values(‘a’, ‘’);
查看數據:
select * from tbl_a;
結果以下:
注:_表明空格,其他空白處表示NULL
驗證:
1 select AVG(col_b) from tbl_a; -- 結果爲 2 ,NULL的紀錄行忽略掉了 2 select MAX(col_b) from tbl_a; -- 結果爲 3 3 select SUM(col_b) from tbl_a; -- 結果爲 6 4 select COUNT(col_b) from tbl_a; -- 結果爲 3 5 select COUNT(col_a) from tbl_a; -- 結果爲 2 6 select COUNT(*) from tbl_a; -- 結果爲 5
三、排序時,NULL做爲無窮大處理
例:
select * from tbl_a order by col_b desc ;
結果以下: