問:什麼是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...