Oracle中Null與空字符串的區(qū)別是什么

本篇文章為大家展示了Oracle中Null與空字符串的區(qū)別是什么,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站制作、做網(wǎng)站與策劃設(shè)計(jì),耒陽網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:耒陽等地區(qū)。耒陽做網(wǎng)站價(jià)格咨詢:18982081108

含義解釋: 
問:什么是NULL? 
答:在我們不知道具體有什么數(shù)據(jù)的時(shí)候,也即未知,可以用NULL,我們稱它為空,ORACLE中,含有空值的表列長度為零。 
ORACLE允許任何一種數(shù)據(jù)類型的字段為空,除了以下兩種情況: 
1、主鍵字段(primary key), 
2、定義時(shí)已經(jīng)加了NOT NULL限制條件的字段 

說明: 
1、等價(jià)于沒有任何值、是未知數(shù)。 
2、NULL與0、空字符串、空格都不同。 
3、對空值做加、減、乘、除等運(yùn)算操作,結(jié)果仍為空。 
4、NULL的處理使用NVL函數(shù)。 
5、比較時(shí)使用關(guān)鍵字用“is null”和“is not null”。 
6、空值不能被索引,所以查詢時(shí)有些符合條件的數(shù)據(jù)可能查不出來,count(*)中,用nvl(列名,0)處理后再查。 
7、排序時(shí)比其他數(shù)據(jù)都大(索引默認(rèn)是降序排列,小→大),所以NULL值總是排在最后。 

使用方法: 
SQL> select 1 from dual where null=null; 

沒有查到記錄 

SQL> select 1 from dual where null=''''; 

沒有查到記錄 

SQL> select 1 from dual where ''''=''''; 

沒有查到記錄 

SQL> select 1 from dual where null is null; 


--------- 

SQL> select 1 from dual where nvl(null,0)=nvl(null,0); 


--------- 

對空值做加、減、乘、除等運(yùn)算操作,結(jié)果仍為空。 
SQL> select 1+null from dual; 
SQL> select 1-null from dual; 
SQL> select 1*null from dual; 
SQL> select 1/null from dual; 

查詢到一個(gè)記錄. 

注:這個(gè)記錄就是SQL語句中的那個(gè)null 

設(shè)置某些列為空值 
update table1 set 列1=NULL where 列1 is not null; 

現(xiàn)有一個(gè)商品銷售表sale,表結(jié)構(gòu)為: 
month    char(6)      --月份 
sell    number(10,2)   --月銷售金額 

create table sale (month char(6),sell number); 
insert into sale values(''200001'',1000); 
insert into sale values(''200002'',1100); 
insert into sale values(''200003'',1200); 
insert into sale values(''200004'',1300); 
insert into sale values(''200005'',1400); 
insert into sale values(''200006'',1500); 
insert into sale values(''200007'',1600); 
insert into sale values(''200101'',1100); 
insert into sale values(''200202'',1200); 
insert into sale values(''200301'',1300); 
insert into sale values(''200008'',1000); 
insert into sale(month) values(''200009'');(注意:這條記錄的sell值為空) 
commit; 
共輸入12條記錄 

SQL> select * from sale where sell like ''%''; 

MONTH SELL 
------ --------- 
200001 1000 
200002 1100 
200003 1200 
200004 1300 
200005 1400 
200006 1500 
200007 1600 
200101 1100 
200202 1200 
200301 1300 
200008 1000 

查詢到11記錄. 

結(jié)果說明: 
查詢結(jié)果說明此SQL語句查詢不出列值為NULL的字段 
此時(shí)需對字段為NULL的情況另外處理。 
SQL> select * from sale where sell like ''%'' or sell is null; 
SQL> select * from sale where nvl(sell,0) like ''%''; 

MONTH SELL 
------ --------- 
200001 1000 
200002 1100 
200003 1200 
200004 1300 
200005 1400 
200006 1500 
200007 1600 
200101 1100 
200202 1200 
200301 1300 
200008 1000 
200009 

查詢到12記錄. 

Oracle的空值就是這么的用法,我們最好熟悉它的約定,以防查出的結(jié)果不正確。 

但對于char 和varchar2類型的數(shù)據(jù)庫字段中的null和空字符串是否有區(qū)別呢?

作一個(gè)測試:

create table test (a char(5),b char(5));

SQL> insert into test(a,b) values(''1'',''1'');

SQL> insert into test(a,b) values(''2'',''2'');

SQL> insert into test(a,b) values(''3'','''');--按照上面的解釋,b字段有值的

SQL> insert into test(a) values(''4'');

SQL> select * from test;

A B
---------- ----------
1 1
2 2
3
4

SQL> select * from test where b='''';----按照上面的解釋,應(yīng)該有一條記錄,但實(shí)際上沒有記錄

未選定行

SQL> select * from test where b is null;----按照上面的解釋,應(yīng)該有一跳記錄,但實(shí)際上有兩條記錄。

A B
---------- ----------
3
4

SQL>update table test set b='''' where a=''2'';
SQL> select * from test where b='''';

未選定行

SQL> select * from test where b is null;

A B
---------- ----------
2
3
4

上述內(nèi)容就是Oracle中Null與空字符串的區(qū)別是什么,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)站欄目:Oracle中Null與空字符串的區(qū)別是什么
文章位置:http://bm7419.com/article0/pccioo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)虛擬主機(jī)、網(wǎng)站營銷建站公司、定制網(wǎng)站品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)