MySQL IF 和 IFNULL 用法示例詳解
在 MySQL 開(kāi)發(fā)中,條件判斷和空值處理是非常常見(jiàn)的需求。其中,IF 和 IFNULL 是最常用的兩個(gè)函數(shù)。
一、IF 函數(shù)詳解
1. 基本語(yǔ)法
IF(condition, value_if_true, value_if_false)
含義:
如果 condition 為真,返回 value_if_true,否則返回 value_if_false。
2. 基礎(chǔ)示例
SELECT IF(1 > 0, 'yes', 'no');
結(jié)果:
yes
3. 實(shí)戰(zhàn)示例
示例1:判斷成績(jī)是否及格
SELECT name,
score,
IF(score >= 60, '及格', '不及格') AS result
FROM student;
示例2:根據(jù)金額分類(lèi)
SELECT amount,
IF(amount > 1000, '高消費(fèi)', '普通消費(fèi)') AS level
FROM orders;4. IF 的嵌套使用
SELECT score,
IF(score >= 90, '優(yōu)秀',
IF(score >= 60, '及格', '不及格')) AS level
FROM student;
說(shuō)明:
IF 可以嵌套實(shí)現(xiàn)多條件判斷。
二、IFNULL 函數(shù)詳解
1. 基本語(yǔ)法
IFNULL(expr1, expr2)
含義:
如果 expr1 不為 NULL,返回 expr1,否則返回 expr2。
2. 基礎(chǔ)示例
SELECT IFNULL(NULL, '默認(rèn)值');
結(jié)果:
默認(rèn)值
3. 實(shí)戰(zhàn)示例
示例1:處理 NULL 值
SELECT name,
IFNULL(phone, '未填寫(xiě)') AS phone
FROM user;
示例2:計(jì)算時(shí)避免 NULL
SELECT price * IFNULL(quantity, 0) AS total FROM orders;
說(shuō)明:
防止 NULL 參與計(jì)算導(dǎo)致結(jié)果為 NULL。
三、IF vs IFNULL 核心區(qū)別
| 對(duì)比維度 | IF | IFNULL |
|---|---|---|
| 功能 | 條件判斷 | 空值處理 |
| 參數(shù)個(gè)數(shù) | 3 個(gè) | 2 個(gè) |
| 判斷方式 | 任意條件 | 是否為 NULL |
| 使用場(chǎng)景 | 分支邏輯 | 默認(rèn)值處理 |
IF 用來(lái)“做判斷”,IFNULL 用來(lái)“補(bǔ)空值”。
四、組合使用示例
在實(shí)際開(kāi)發(fā)中,經(jīng)常會(huì)組合使用:
SELECT name,
IF(IFNULL(score, 0) >= 60, '及格', '不及格') AS result
FROM student;
邏輯:
- 先用 IFNULL 處理空值
- 再用 IF 判斷
五、常見(jiàn)坑點(diǎn)總結(jié)
1. NULL 參與計(jì)算問(wèn)題
SELECT 1 + NULL;
結(jié)果:
NULL
解決:
SELECT 1 + IFNULL(NULL, 0);
2. IF 不是流程控制語(yǔ)句
注意:
- IF 是函數(shù)(表達(dá)式)
- 不是存儲(chǔ)過(guò)程里的 IF 語(yǔ)句
3. 嵌套過(guò)多影響可讀性
建議:
多條件優(yōu)先使用 CASE WHEN。
六、擴(kuò)展:CASE WHEN(推薦)
SELECT score,
CASE
WHEN score >= 90 THEN '優(yōu)秀'
WHEN score >= 60 THEN '及格'
ELSE '不及格'
END AS level
FROM student;
優(yōu)點(diǎn):
- 可讀性更強(qiáng)
- 更適合復(fù)雜邏輯
參考
https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html#function_if
https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html#function_ifnull
到此這篇關(guān)于MySQL IF 和 IFNULL 用法示例詳解的文章就介紹到這了,更多相關(guān)mysql if和ifnull用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MYSQL中IFNULL和NULLIF函數(shù)的區(qū)別小結(jié)
- Mysql中isnull,ifnull,nullif的用法及語(yǔ)義詳解
- Mysql中 IFNULL函數(shù)的使用詳解
- MySQL中NULLIF?、IFNULL、IF的用法和區(qū)別舉例詳解
- MySQL語(yǔ)句之條件語(yǔ)句IFNULL和COALESCE的區(qū)別說(shuō)明
- Mysql中IFNULL函數(shù)舉例詳解
- MySql中的IFNULL、NULLIF和ISNULL用法詳解
- MySQL ifnull()函數(shù)的具體使用
- MySQL流程控制IF()、IFNULL()、NULLIF()、ISNULL()函數(shù)的使用
- MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函數(shù)的使用詳解
相關(guān)文章
mysql now()函數(shù)調(diào)用系統(tǒng)時(shí)間不對(duì)的解決方法
mysql的now()函數(shù)與實(shí)際時(shí)間不符,本文就詳細(xì)的介紹一下mysql now()函數(shù)調(diào)用系統(tǒng)時(shí)間不對(duì)的解決方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2023-05-05
mysql聯(lián)合索引的實(shí)現(xiàn)示例
聯(lián)合索引也叫組合索引或多列索引,是指在MySQL中對(duì)一個(gè)表的多個(gè)列共同建立的索引,與單列索引不同,聯(lián)合索引是同時(shí)對(duì)多個(gè)列的值進(jìn)行排序和存儲(chǔ)的索引結(jié)構(gòu),下面就來(lái)介紹一下如何使用2025-12-12
MySQL百萬(wàn)級(jí)數(shù)據(jù)量分頁(yè)查詢(xún)方法及其優(yōu)化建議
這篇文章主要介紹了MySQL百萬(wàn)級(jí)數(shù)據(jù)量分頁(yè)查詢(xún)方法及其優(yōu)化建議,幫助大家更好的處理MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下2020-08-08
MySQL開(kāi)啟配置binlog及通過(guò)binlog恢復(fù)數(shù)據(jù)步驟詳析
這篇文章主要給大家介紹了關(guān)于MySQL開(kāi)啟配置binlog及通過(guò)binlog恢復(fù)數(shù)據(jù)的相關(guān)資料,binlog是MySQL最重要的日志,binlog是二進(jìn)制日志,它記錄了所有的DDL和DML語(yǔ)句,除了查詢(xún)語(yǔ)句select、show等,需要的朋友可以參考下2024-06-06
mysql 行轉(zhuǎn)列和列轉(zhuǎn)行實(shí)例詳解
這篇文章主要介紹了mysql 行轉(zhuǎn)列和列轉(zhuǎn)行實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03
詳談mysqldump數(shù)據(jù)導(dǎo)出的問(wèn)題
下面小編就為大家?guī)?lái)一篇詳談mysqldump數(shù)據(jù)導(dǎo)出的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
mysql自動(dòng)定時(shí)備份數(shù)據(jù)庫(kù)的最佳方法(windows服務(wù)器)
網(wǎng)上有很多關(guān)于window下Mysql自動(dòng)備份的方法,可是真的能用的也沒(méi)有幾個(gè),有些說(shuō)的還非常的復(fù)雜,難以操作,這里腳本之家小編為大家分享與整理了幾個(gè)軟件方便大家使用2016-11-11
mysql創(chuàng)建時(shí)間字段添加默認(rèn)值方式
這篇文章主要介紹了mysql創(chuàng)建時(shí)間字段添加默認(rèn)值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07

