Oracle資料庫中null的使用詳解

2021-08-31 23:16:02 字數 4243 閱讀 6663

問:什麼是null?

答:在我們不知道具體有什麼資料的時候,也即未知,可以用null,我們稱它為空,oracle中,含有空值的表列長度為零。oracle允許任何一種資料型別的字段為空,除了以下兩種情況:

1、主鍵字段(primary key),

2、定義時已經加了not null限制條件的字段。

附加說明:

1、等價於沒有任何值、是未知數。

2、null與0、空字串、空格都不同。

3、對空值做加、減、乘、除等運算操作,結果仍為空。

4、null的處理使用nvl函式。

5、比較時使用關鍵字用「is null」和「is not null」。

6、空值不能被索引,所以查詢時有些符合條件的資料可能查不出來,

count(*)中,用nvl(列名,0)處理後再查。

7、排序時比其他資料都大(索引預設是降序排列,小→大),

所以null值總是排在最後。

使用方法:

1sql

>

select

1from

dual 

where

null

=null;2

沒有查到記錄

3sql

>

select

1from

dual 

where

null=''

;4沒有查到記錄

5sql

>

select

1from

dual 

where''=

'';6沒有查到記錄

7sql

>

select

1from

dual 

where

null

isnull;8

19---------101

11sql

>

select

1from

dual 

where

nvl(

null,0

)=nvl(

null,0

);12113

---------141

15 對空值做加、減、乘、除等運算操作,結果仍為空。

1sql

>

select1+

null

from

dual;

2sql

>

select1-

null

from

dual;

3sql

>

select1*

null

from

dual;

4sql

>

select1/

null

from

dual;

查詢到乙個記錄。

注:這個記錄就是sql語句中的那個null

設定某些列為空值

update table1 set 列1=null where 列1 is not null;

現有乙個商品銷售表sale,表結構為:

month  char(6)  ——月份

sellnumber(10,2) ——月銷售金額

1create

table

sale (

month

char(6

),sell 

number);2

insert

into

sale 

values('

200001',

1000);3

insert

into

sale 

values('

200002',

1100);4

insert

into

sale 

values('

200003',

1200);5

insert

into

sale 

values('

200004',

1300);6

insert

into

sale 

values('

200005',

1400);7

insert

into

sale 

values('

200006',

1500);8

insert

into

sale 

values('

200007',

1600);9

insert

into

sale 

values('

200101',

1100

);10

insert

into

sale 

values('

200202',

1200

);11

insert

into

sale 

values('

200301',

1300

);12

insert

into

sale 

values('

200008',

1000

);13

insert

into

sale(

month

) values('

200009');

14(注意:這條記錄的sell值為空)

15commit;

共輸入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記錄。

結果說明:

查詢結果說明此sql語句查詢不出列值為null的字段

此時需對字段為null的情況另外處理。

sql>

select

*from

sale 

where

sell 

like'%

'orsell 

isnull

;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的空值就是這麼的用法,我們最好熟悉它的約定,以防查出的結果不正確。

對於null而言還有乙個特殊的用法:

select

null

from

sale 

where

sell

>

1500;

以上語句中並沒有什麼特殊的含義,它只是想得到是否有符合條件的記錄,而不在乎取出什麼字段,於是用null來代替一下。

總結:null就是null,和別的型別沒有可比性。

Oracle資料庫中的 與NULL的關係

在oracle資料庫中 與null是等價的。均表示空值,而不是類似其他資料庫上 表示空串,null表示空值。oracle 允許任何一種資料型別的字段為空,除了以下兩種情況 1 主鍵字段 primary key 2 定義時已經加了not null限制條件的字段 說明 1 null等價於沒有任何值 是未...

Oracle資料庫中的 與NULL的關係

在oracle資料庫中 與null是等價的。均表示空值,而不是類似其他資料庫上 表示空串,null表示空值。oracle 允許任何一種資料型別的字段為空,除了以下兩種情況 1 主鍵字段 primary key 2 定義時已經加了not null限制條件的字段 說明 1 null等價於沒有任何值 是未...

oracle資料庫中關於null排序的問題

問題描述 在處理一般的資料記錄中,對於數字型別的字段,在oracle的排序中,預設把null值做為大於任何數字的型別,當然對於varchar2類 型的字段,預設也是該處理方式,但是客戶要求排序的過程中,需要把null的字段預設排在前邊 從小 大 一般的order by x,無法解決。問題解決 方案1...