首先建一張簡單的表,用於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...