【開發篇sql】 條件和表示式(三) Null詳解
3,Null詳解
一行的一個cell如果沒有值,那麼就是null的,注意並不是他的值是null,所以col=null與col is null是完全不同的,null有很多特性,可以簡單看幾個例子來說明:
SQL> insert into t_test_chr values ('1','',null);
1 row created.
SQL> select * from t_test_chr where type_char=1;
TYPE TYPE_VARCHAR2 TYPE_NVARCHAR2
---- -------------------- --------------------
1
SQL> select * from t_test_chr where type_varchar2 is null and type_nvarchar2 is null;
TYPE TYPE_VARCHAR2 TYPE_NVARCHAR2
---- -------------------- --------------------
1
可以看出,''與null都是沒有值的,可以認為他們相同,但是:
SQL> select * from dual where ''=null;
no rows selected
SQL> select * from dual where '' is null;
D
-
X
同樣的情況:
SQL> select * from dual where '' ='';
no rows selected
SQL> select * from dual where null =null;
no rows selected
SQL> select * from dual where 1!=null;
no rows selected
這說明null不等於null,其他任何值與null的比較,結果是未知的。
在一些關聯問題中欄位包含了null值,通常情況下可以使用外連線來解決null值的影響。
同時也可以利用null的特性來實現一些特定的需求,比如:
SQL> create table t_test_null(id number,send_time date ,recv_time date );
Table created.
SQL> insert into t_test_null
2 select 1, sysdate, '' from dual;
1 row created.
SQL> insert into t_test_null
2 select 1, '', sysdate from dual;
1 row created.
插入的兩條資料如果是模擬某種成對的操作,現在要知道某個id下面的send和recv時間,並且在一條中顯示(往往情況比這個複雜),那麼就可以使用:
SQL> select id ,min(send_time),min(recv_time) from t_test_null group by id;
ID MIN(SEND_ MIN(RECV_
---------- --------- ---------
1 16-MAY-10 16-MAY-10
或者使用max也可以,因為null的“值”比其他都小,或者都大。
一般為了消除控制欄位中的null值出現,可以增加一個 not null約束,增加not null約束之後新插入或者更新後的欄位值不允許為null,但是要注意的是,這個約束對增加之前已有的資料不會檢查。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16179598/viewspace-662798/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【開發篇sql】 條件和表示式(十) 特定的dmlSQL
- 【開發篇sql】 條件和表示式(九) group by語句SQL
- 【開發篇sql】 條件和表示式(六) Exists, not exsists,in ,not inSQL
- 【開發篇sql】 條件和表示式(五) 集合運算SQL
- 【開發篇sql】 條件和表示式(八) 10g 正規表示式SQL
- 【開發篇sql】 條件和表示式(一) 資料型別SQL資料型別
- 【開發篇sql】 條件和表示式(四) 幾個常見的偽列SQL
- 【開發篇sql】 條件和表示式(七) decode,case when,connect by 語句SQL
- 【開發篇sql】 條件和表示式(二) 資料型別的比較規則SQL資料型別
- 通用函式和條件表示式函式
- Oracle OCP(06):通用函式和條件表示式Oracle函式
- CMake 生成器表示式---條件表示式和邏輯運算子
- Java8特性詳解 lambda表示式(三):原理篇Java
- Java 條件表示式的優化Java優化
- crontab和cron表示式詳解
- ORACLE SQL過濾條件是IS NULL or !=的優化OracleSQLNull優化
- JS基礎篇–正規表示式詳解JS
- zabbix觸發器表示式詳解觸發器
- 深入詳解SQL中的NullSQLNull
- 【開發篇sql】 基礎概述(三) DDL和DMLSQL
- linux if [條件] 詳解Linux
- 嵌入式C++開發詳解(三)C++
- Kotlin——高階篇(一):Lambda表示式詳解Kotlin
- Odoo Domain條件表示式寫法總結OdooAI
- Lambda表示式詳解
- IE條件註釋詳解
- Java8特性詳解 lambda表示式(一):使用篇Java
- ecmallwidgets掛件開發詳解
- CHECK約束中的NULL條件Null
- 詳解正規表示式
- 正規表示式詳解
- linux 條件變數詳解Linux變數
- 3.1Python流程控制(1):條件表示式Python
- PL/SQL 條件SQL
- 郵件開發:SMTP協議詳解協議
- quartz.net 時間表示式----- Cron表示式詳解quartz
- 謂詞條件是is null走索引嗎?Null索引
- Flutter完整開發實戰詳解(三、打包與填坑篇)Flutter