關於NULL的兩個計算

shuangoracle發表於2012-05-09
今天在測試一個指令碼時遇到null計算的問題,貼出來記錄下:
SQL> select null + 9 from dual;

 NULL+9
----------
null和其他值相加是空,再看下面這個:
SQL> create table t1(id number);

Table created

SQL> insert into t1 values(null);

1 row inserted

SQL> insert into t1 values(9);

1 row inserted

SQL> select sum(id) from t1;

 SUM(ID)
----------
 9
哦~是9,再看:
SQL> create table t2(id1 number,id2 number);

Table created

SQL> insert into t2 values(null,9);

1 row inserted

SQL> select id1+id2 from t2;

 ID1+ID2
----------
哦?竟然也是空。
對聚合函式來說null和其他值相加就是其他值,所以平時從一個表中取出值相加時就沒必要先替換如果是空就按0計算了,但是如果是一個表中幾個欄位相加或者直接用null和其他值相加,不管其他值是多少都按空算了。這個平時稍不注意很可能出錯哦~
NULL是資料庫中特有的資料型別,當一條記錄的某個列為NULL,則表示這個列的值是未知的、不確定的。既然是未知的,就有無數種的可能性。因此,NULL並不是一個確定的值。這是NULL的由來、也是NULL的基礎,所有和NULL相關的操作的結果都可以從NULL的概念推匯出來。
判斷一個欄位是否為NULL,應該用IS NULL或IS NOT NULL,而不能用'='。對NULL的判斷只能定性,即是不是NULL(IS NULL/IS NOT NULL),而不能定值。簡單的說,由於NULL存在著無數的可能,因此兩個NULL不是相等的關係,同樣也不能說兩個NULL就不相等,或者比較兩個NULL的大小,這些操作都是沒有意義的,得不到一個確切的答案。因此,對NULL的=、!=、>、=、<=等操作的結果都是未知的,也就算說,這些操作的結果仍然是NULL。同理,對NULL進行+、-、*、/等操作的結果也是未知的,所以也是NULL。
所以,很多時候會這樣總結NULL,除了IS NULL、IS NOT NULL以外,對NULL的任何操作的結果還是NULL。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24496749/viewspace-723169/,如需轉載,請註明出處,否則將追究法律責任。

相關文章