SQL語句中null的應用。

2021-07-30 15:33:28 字數 1949 閱讀 4154

首先推薦一下深入詳解sql中的null( 這篇文章寫得比較全面了。

這裡我說一下我遇到的問題。

在設計乙個儲存過程時,我們經常把乙個變數查詢出來之後,放入乙個變數中。

標準做法是,先select 資料賦值給變數。然後再判斷變數是否為空。(如果事情到這裡,沒有問題了。)

當時為了偷懶直接使用了一些函式來處理null。eg:isnull之類的函式。測試過程中發現沒有解決問題。

於是我開始了查詢問題,先懷疑資料庫,再懷疑介面等等等。

結果我在反覆調查求證之後,發現由於where條件是false。所以沒有結果。進而我在select部分中加的所有函式都無效了。

這就是【結果是空集】與【集合中有乙個物件,物件為空集】經典的集合問題了

樣例表:

-- ----------------------------

-- table structure for `test`

-- ----------------------------

drop table if exists `test`;

create table `test` (

`test_i` int(11) default null,

`test_c` varchar(512) default null

) engine=innodb default charset=gbk;

樣例資料:

-- ----------------------------

-- records of test

-- ----------------------------

insert into `test` values ('1', 'a');

insert into `test` values ('2', 'b');

樣例儲存過程(版本1):

drop procedure if exists `procedure_test`;

create  procedure `procedure_test`(

_test_i int(11) ,

_test_c varchar(512)

)begin

declare _test_i_ex int;

select  test_i into _test_i_ex from test where test_i = _test_i ;

if _test_i <> _test_i_ex then

insert into test(

test_i,

test_c

)values(

_test_i,

_test_c

);end if ;

end;

我立刻判斷出來_test_i_ex是null引發的問題。於是寫了第二個版本的儲存過程。

樣例儲存過程(版本2改進版):

drop procedure if exists `procedure_test`;

create  procedure `procedure_test`(

_test_i int(11) ,

_test_c varchar(512)

)begin

declare _test_i_ex int;

select  nullif(test_i,1) into _test_i_ex from test where test_i = _test_i ; /*用函式判斷了,當這個值為null的時候*/

if _test_i <> _test_i_ex then

insert into test(

test_i,

test_c

)values(

_test_i,

_test_c

);end if ;

end;

第二次的修改,雖然問題點是正確的,但是改法不足。

因為查詢結果為空,所以函式判斷根本沒用。

當sql語句中 遇到null發生的故事

今天測試過程發現個問題,sql語句中 不起作用,原sql語句如下 執行結果是0列 select from company member rel where companyid 111552 and active n 資料庫中,表company member rel部分資料如下 如果companyid...

sql語句中null和空字元的區別

例子 value nullif x,y value是函式 1 null 代表宣告了乙個空物件,而不僅僅是乙個字串,值可以賦給任何物件。空字元 代表宣告了乙個物件例項,這個物件例項的值是乙個長度為0的空字串。2 string s null 只是定義了乙個控制代碼,即你有了個引用,但是這個引用未指向任何...

在 SQL 語句中處理 NULL 值的方法

在日常使用資料庫時,你在意過null值麼?其實,null值在資料庫中是乙個很特殊且有趣的存在,下面我們一起來看看吧 在查詢資料庫時,如果你想知道乙個列 例如 使用者註冊年限 user age 是否為 null,sql 查詢語句該怎麼寫呢?是這樣 select from table where use...