資源描述:
《漫 談oracle 中 空 值》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、漫談oracle中的空值摘自:計(jì)算機(jī)世界日報(bào)河北省統(tǒng)計(jì)局賈書民----在數(shù)據(jù)庫中,空值用來表示實(shí)際值未知或無意義的情況。在一個表中,如果一行中的某列沒有值,那么就稱它為空值(NULL)。任何數(shù)據(jù)類型的列,只要沒有使用非空(NOTNULL)或主鍵(PRIMARYKEY)完整性限制,都可以出現(xiàn)空值。在實(shí)際應(yīng)用中,如果忽略空值的存在,將會造成造成不必要的麻煩。
----例如,在下面的雇員表(EMP)中,雇員名(ENAME)為KING的行,因?yàn)镵ING為最高官員(PRESIDENT),他沒有主管(MGR),所以其MGR為空值。因?yàn)椴皇撬械墓蛦T都有手續(xù)費(fèi)(COM
2、M),所以列COMM允許有空值,除300、500、1400、0以外的其它各行COMM均為空值。EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO----------------------------------------------------7369SMITHCLERK790217-DEC-80800207499ALLENSALESMAN769820-FEB-811600300307521WARDSALESMAN769822-FEB-811250500307566JONESMANAGER783902-APR-81297520
3、7654MARTINSALESMAN769828-SEP-8112501400307698BLAKEMANAGER783901-MAY-812850307782CLARKMANAGER783909-JUN-812450107788SCOTTANALYST756609-DEC-823000207839KINGPRESIDENT17-NOV-815000107844TURNERSALESMAN769808-SEP-8115000307876ADAMSCLERK778812-JAN-831100207900JAMESCLERK769803-DEC-819503
4、07902FORDANALYST756603-DEC-813000207934MILLERCLERK778223-JAN-82130010----本文將以上述EMP表為例,具體討論一下空值在日常應(yīng)用中所具有的一些特性。----一、空值的生成及特點(diǎn)----1.空值的生成----如果一列沒有非空(NOTNULL)完整性限制,那么其缺省的值為空值,即如果插入一行時未指定該列的值,則其值為空值。----使用SQL語句INSERT插入行,凡未涉及到的列,其值為空值;涉及到的列,如果其值確實(shí)為空值,插入時可以用NULL來表示(對于字符型的列,也可以用''來表示)。-
5、---例:插入一行,其EMPNO為1、ENAME為'JIA'、SAL為10000、job和comm為空值。SQL>insertintoemp(empno,ename,job,sal,comm)values(1,'JIA',NULL,1000,NULL);SQL>select*fromempwhereempno=1;EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO-------------------------------------------------------1JIA1000----可以看到新插入的一行,除job和co
6、mm為空值外,mgr、hiredate、deptno三列由于插入時未涉及,也為空值。----使用SQL語句UPDATE來修改數(shù)據(jù),空值可用NULL來表示(對于字符型的列,也可以用''來表示)。例:SQL>updateempsetename=NULL,sal=NULLwhereempno=1;----2.空值的特點(diǎn)----空值具有以下特點(diǎn):----*等價(jià)于沒有任何值。----*與0、空字符串或空格不同。----*在where條件中,Oracle認(rèn)為結(jié)果為NULL的條件為FALSE,帶有這樣條件的select語句不返回行,并且不返回錯誤信息。但NULL和FA
7、LSE是不同的。----*排序時比其他數(shù)據(jù)都大。----*空值不能被索引。----二、空值的測試----因?yàn)榭罩当硎救鄙贁?shù)據(jù),所以空值和其它值沒有可比性,即不能用等于、不等于、大于或小于和其它數(shù)值比較,當(dāng)然也包括空值本身(但是在decode中例外,兩個空值被認(rèn)為是等價(jià))。測試空值只能用比較操作符ISNULL和ISNOTNULL。如果使用帶有其它比較操作符的條件表達(dá)式,并且其結(jié)果依賴于空值,那么其結(jié)果必定是NULL。在where條件中,Oracle認(rèn)為結(jié)果為NULL的條件為FALSE,帶有這樣條件的select語句不返回行,也不返回錯誤信息。----例如查
8、詢EMP表中MGR為NULL的行:SQL>select*fromempwhere