ifnull函數使用方法?
IFNULL函數是MySQL控制流函數之一,它接受兩個參數,如果不是NULL,則返回第一個參數。 否則,IFNULL函數返回第二個參數。
兩個參數可以是文字值或表達式。
一、語法格式
IFNULL(expression_1,expression_2);
如果expression_1不為NULL,則IFNULL函數返回expression_1; 否則返回expression_2的結果。
如果要返回基于TRUE或FALSE條件的值,而不是NULL,則應使用IF函數。
二、簡單示例
SELECT IFNULL(1,2); -- returns 1
SELECT IFNULL('',2); -- returns ''(空字符串也是有值)
SELECT IFNULL(0,2); -- returns 0(0也是有值)
SELECT IFNULL(NULL,'暫無數據'); -- returns '暫無數據'
上述四個示例的結果表明,查詢的字段不管是0還是空字符串,都不為null,會原樣輸出,只有查詢的字段為null時,才會使用第二個參數,即自定義的文本或者數字顯示。
三、應用場景
當兩個表關聯查詢時,如果A表為主表,B表為關聯表,且B表無數據時,如果為null的話我們可以換個文案顯示。
例:A表是學生表
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nick` VARCHAR(20) NOT NULL,
`class_id` INT(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`) USING BTREE
);
INSERT INTO student(nick, class_id) VALUES ('xiaoming', 1),('xiaohong', 2),('xiaogang', 0)
B表是班級表
CREATE TABLE `class` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) NOT NULL,
PRIMARY KEY (`id`) USING BTREE
);
INSERT INTO class(name) VALUES ('一班'),('二班'),('三班')
當我們關聯查詢時,已經分過班級的學生顯示班級,暫無班級的學生顯示暫無班級,這種業務場景下就要使用if null條件
例:SELECT s.id as '學生id',s.nick as '學生昵稱',IFNULL(c.name,'暫無班級') as '班級' FROM student s LEFT JOIN class c on s.class_id = c.id
查詢結果為:
學生id 學生昵稱 學生班級
1 xiaoming 一班
2 xiaohong 二班
3 xiaogang 暫無班級