mysql函式IFNULL使用的注意事項

2021-08-28 06:29:18 字數 1456 閱讀 7809

首先建一張簡單的表,用於sql語句的操作

建表語句如下:

create table `student` (`id` int(11) not null auto_increment comment '主鍵' ,`name` varchar(8) character set utf8 collate utf8_general_ci not null default '' comment '名字' ,`score` int(4) not null default 0 comment '分數' ,primary key (`id`)

);

手動建立資料如下:

現在開始正題:

a. ifnull的作用是什麼?下面乙個簡單的sql和結果說明,如果ifnull(a,b),a接收的值為null,則返回b,否則返回a;

select ifnull(null,0);
b. 以下sql語句,大家可以**下結果,按照ifnull函式的作用,應該返回0才對,可是結果並不是這樣。

select ifnull(score,0) from student where id = 4;
返回結果,居然是null,與預期的結果0不一致。

c. 以下語句返回正確結果0;

select ifnull((select score from student where id = 4),0);
總結:使用b方式使用ifnull、sum函式等需要確保有查詢記錄,否則也將返回null值,當然也可使用c方式避免返回null值,避免程式中出現npe異常。

select ifnull(ifnull(cost_material,0)+ifnull(cost_labor,0)+ ifnull(cost_expenses,0) ,0) as sum1 from cont_contract_cost_detail where contract_id=乙個不存在的值

為什麼返回的還是null

出現原因:

mysql 語句各分支有執行順序,從前至後如下所示:

題目中where條件為假,返回空結果集,進而selece中ifnull函式並沒有可操作的記錄。

所以不會改變原來記錄中的null值。

分支執行順序問題是乙個重要的概念,和資料庫引擎的內部機制有關。

雖然沒有明確的文件說明,但where分支先於select分支執行是有定論的。

MySql的IF和IFNULL函式

mysql的if既可以作為表示式用,也可在儲存過程中作為流程控制語句使用,如下是做為表示式使用 if expr1,expr2,expr3 如果 expr1 是true expr1 0 and expr1 null 則 if 的返回值為expr2 否則返回值則為 expr3。if 的返回值為數字值或字...

MySQL 的IFNULL 函式的作用

在使用left join等聯表查詢時,常遇到某些欄位為null,一般都在後台語言使用if a null 判斷做處理,其實mysql本身也有乙個ifnull函式可以處理。同時我們也來說說isnull 和nullif 函式。一 ifnull expr1,expr2 用法 假如expr1不為null,則 ...

MYSQL中的IFNULL與IF函式

1.ifnull expr1,expr2 2.如果expr1不是null,ifnull 返回expr1,否則它返回expr2。ifnull 返回乙個數字或字串值,取決於它被使用的上下文環境。3.mysql select ifnull 1,0 4.1 5.mysql select ifnull 0,1...