--null的原理 --oracle一直將null和空字元串’’同等對待 --1.null的運算 --算術表達式和null 運算總為null,實際上所有的操作符除了||連接操作符外,只要有一個操作符為null,則結果為null。 --------------------------------nul... ...
--null的原理 --oracle一直將null和空字元串’’<長度為0>同等對待<如’’ is null是true,’’=null為false,如果聲明a varchar2:=’’,那麼a is null為true,a=’’為false> --1.null的運算 --算術表達式和null 運算總為null,實際上所有的操作符除了||連接操作符外,只要有一個操作符為null,則結果為null。 --------------------------------null操作符運算------------------------------ --算術操作,只要有一個操作數為null,則結果為null select null+10,null*10,null-10,null/10 from dual; --連接操作符||除外,null相當於空字元串 select null||'abc', ''||'abc' from dual;--abc ,abc --2.null在函數中的使用 create table nulltest as select null a from dual union all select 1 from dual union all select 2 from dual; alter table test2 add constraints uk_nulltest_id primary key(city); --null在組函數中的使用,sum,avg,min,max都會忽略null值 select sum(a) from nulltest; --3 select avg(a) from nulltest; --1.5 select min(a) from nulltest; --1 select max(a) from nulltest; --2 --null在count函數中 --(1)如果指定count(*)或count(1)則不會忽略null(count(*)和count(1)效果一樣,效率也沒有什麼差別) --(2)如果是count(列名)則會忽略null select count(*) from nulltest; --3 包含了null的計算 select count(1) from nulltest; --3 包含了null的計算 select count(a) from nulltest; --2 忽略了null select count(rowid) from nulltest; --3 --3.null在條件中的使用 --如果一個操作數含有null,只能通過is null 和is not null 來比較才能返回true 或false,否則返回的結果只能是unkown. --4.null和索引、執行計劃的關係(null在查詢優化中的使用) --如果是b*tree索引,單列索引,索引列上有null值,則is null不走索引,當然is not null可能走索引,看cbo計劃. --另外如果要走索引,可以使用bitmap索引或者使用複合索引,確保另一列上無null。