關於null值的小知識
關於null值的小知識
資料庫中的邏輯關係是三元的,true,false,null。null 可以理解為神秘莫測的,不知道的,無法確定的。今天要一層一層的剝去null 值的神秘外衣。。。額,貌似這樣有些猥瑣。言歸正傳下面來梳理下關於null的知識。
一、null 值參與算數運算的結果為null,不過對於字串的連線運算就不同了。
SQL> select 5+2-3 as result1,
2 5+2-3+null as result2,
3 3*5*null as result3
4 from dual;
RESULT1 RESULT2 RESULT3
---------- ---------- ----------
4
SQL> select 'hello'||null||' oracle' from dual;
'HELLO'||NUL
------------
hello oracle
二、在聚集函式中avg,sum,min,max 等在求值的時候會忽略null值,但是count(*) 不會忽略null 值。先造出一個空值來count(cloumn_name) 也是會忽略null 值的。
SQL> update employees
2 set salary = null
3 where employee_id = 100;
1 row updated.
SQL> select count(*) as row_count,count(salary),
2 avg(salary) as avg_salary,sum(salary) as sum_salary,
3 min(salary) as min_salary,max(salary) as max_salary
4 from employees;
ROW_COUNT COUNT(SALARY) AVG_SALARY SUM_SALARY MIN_SALARY MAX_SALARY
---------- ------------- ---------- ---------- ---------- ----------
107 106 6296.22642 667400 2100 17000
三、在where 子句中使用null值。在where 中不能使用等於號指定null 值條件。應該使用is null或者is not null.下面查詢salary 值為null 的員工的姓名。
SQL> select last_name,first_name
2 from employees
3 where salary = null;
no rows selected
SQL> select last_name,first_name
2 from employees
3 where salary is null;
LAST_NAME FIRST_NAME
------------------------- --------------------
King Steven
四、group by 子句中的null 值。先建立一個測試用的表testing02.
在group by 子句中不會忽略null 值,也會對null 進行分組。
SQL> create table testing02 (id number(6),name varchar2(20));
Table created.
SQL> insert into testing02 values(100,'testing');
1 row created.
SQL> insert into testing02 values(101,null);
1 row created.
SQL> commit;
Commit complet
SQL> select count(*) as row_count,name
2 from testing02
3 group by name;
ROW_COUNT NAME
---------- --------------------
1
1 testing
五、在order by 中的null 值。透過在order by 中指定nulls first,nulls last 來實現讓帶有null 值的列排在前面或者後面,不要太依賴select 語句查詢的預設輸出。
SQL> select * from testing02;
ID NAME
---------- --------------------
100 testing
101
SQL> select * from testing02
2 order by name nulls first;
ID NAME
---------- --------------------
101
100 testing
SQL> select * from testing02
2 order by name nulls last;
ID NAME
---------- --------------------
100 testing
101
六、在聚合運算union,union all,minus,intersect 中不會忽略null 值null 值將作為相等的值來對待此時可以認為null 等於 null.
7、null 值的插入。往表中的某一列插入一個null 值可以使用很多的方法,很多時候這取決於習慣。
SQL> insert into testing02 values(102,'');
1 row created.
SQL> insert into testing02 values(103,null);
1 row created.
SQL> insert into testing02 (id) values(103);
1 row created.
要注意的是下面這條語句不會插入null 值,而是插入字串null.
SQL> insert into testing02 values(102,'null');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from testing02
2 where id > 101;
ID NAME
---------- --------------------
102
103
103
102 null
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26110315/viewspace-722162/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於SFV的小知識(轉)
- 關於SQL優化的小知識SQL優化
- 關於 JavaScript 字串的一個小知識JavaScript字串
- 那些關於Mac終端的小知識Mac
- 關於redo的幾個小知識點
- 關於C++ scanf的一個小知識C++
- 關於網校系統開發的小知識
- 關於蘋果企業開發者賬號的小知識蘋果
- 關於前端應該知道的5個小知識前端
- 關於處理死鎖的一點小知識
- 關於NULL值在索引裡的兩個疑惑Null索引
- null(空值)小結Null
- 關於MySQL索引知識與小妙招 — 學到了!MySql索引
- 關於散裝和盒裝CPU小知識
- Python中關於Thread的一點小知識Pythonthread
- 陳皓:關於閏秒(leap second)的小知識
- 關於ORACLE MYSQL NOT IN和NOT exists需要注意的 NULL值OracleMySqlNull
- 關於高水位的知識
- 關於NULLNull
- 關於LLC知識1
- 關於知識付費的思考
- 關於序列化的知識
- 關於Python Number 相關的知識!Python
- 關於Java的小知識集合之 ArrayList可變長陣列Java陣列
- 索引裡的NULL值與排序小記索引Null排序
- 關於 oracle NULLOracleNull
- 有關Es6知識的小結
- 面試小知識:MySQL索引相關面試MySql索引
- SEO關於探討URL的知識!
- 關於機器學習需要了解的知識機器學習
- 關於索引必須知道的知識索引
- 關於range的一個知識點
- 關於TortoiseSVN的一些知識
- 關於專案管理的知識點專案管理
- Linux下" >/dev/null 2>&1 "相關知識說明LinuxdevNull
- React相關知識點:關於ReduxReactRedux
- ORACLE關於NULL的總結OracleNull
- 決策樹相關知識小結