最近在檢查sql時碰到幾次對null處理的問題,迷惑了我們寫sql的思路。下面就我的理解和網上查到的資料,對null的操作做乙個總結。
首先對oracle中的null做一些簡單的說明:
1、oracle中null與0,空字串,空格,包括null與null也是不等的。
2、oracle中對null做算術運算結果仍然為null。
3、處理方法有nvl函式,比較方法是is null或者is not null。
4、null不能被索引,比如select count(null) from dual的查詢結果是0。
5、null排序比其他所有型別的大,乙個可以為空的字段倒排序,前面的都是null資料。
下面舉例說明:
1、sql> select 1 from dual where null=null;
未選定行
sql> select 1 from dual where null='';
未選定行
sql> select 1 from dual where null=0;
未選定行
sql> select 1 from dual where ''='';
未選定行
以上4個查詢中,大家可以看到null在oracle中可以理解為什麼都沒有的意思,它與任何物件都是不相等的。
2、
sql> select 1+null from dual;
1+null
----------
sql> select 1-null from dual;
1-null
----------
sql> select 1*null from dual;
1*null
----------
sql> select 1/null from dual;
1/null
----------
sql> select 1 from dual where 1+null is null;
1----------
1sql> select 1 from dual where 1-null is null;
1----------
1sql> select 1 from dual where 1*null is null;
1----------
1sql> select 1 from dual where 1/null is null;
1----------
1以上是null的加減乘除操作,可見null的加減乘除是null。
3、
sql> select 1 from dual where null is null;
1----------
1sql> select 1 from dual where '' is null;
1----------
1sql> select 1 from dual where nvl(null,0) is not null;
count(null)
-----------
0sql> select count(nvl(null, 0)) from dual;
count(nvl(null,0))
------------------
1以上兩個查詢提醒大家在統計的時候注意根據自己的需要處理null欄位的問題。
其他說明:
根據oracle中null的定義,null為未知,不等於null,因此在表中的唯一欄位中存在多個null是不會違反唯一行約束的。
oracle中NULL值處理
1 nvl expr1,expr2 功能 1 expr1 expr2均不為null時,返回expr1 2 expr1 expr2均為null時,返回null 3 expr1為null,expr2不為null,返回expr2 4 expr1不為null,expr2為null,返回expr1。2 nvl...
oracle中對null值的處理
1.在oracle的運算表示式中,如果表示式的某個值為null,則整個表示式的結果就會為null.就拿oracle自帶的emp表為例,想要計算出每位員工的年工資,如果使用下面這個sql語句 select sal 12 comm 12 年工資 ename from emp 因為只有 saleman 的...
oracle 對 Null的處理
1 預設處理 oracle在order by 時預設認為null是最大值,所以如果是asc公升序則排在最後,desc降序則排在最前 2 使用nvl函式 nvl函式可以將輸入引數為空時轉換為一特定值,如 nvl employee name,張三 表示當employee name為空時則返回 張三 如果...