MySQL中NULLIF?、IFNULL、IF的用法和區(qū)別舉例詳解
前言
在 MySQL 中,NULLIF、IFNULL 和 IF 是用于處理 NULL 值的三種不同的函數(shù)。
1. NULLIF 函數(shù)
NULLIF 函數(shù)用于比較兩個(gè)表達(dá)式,如果它們的值相等,則返回 NULL,否則返回第一個(gè)表達(dá)式的值。語(yǔ)法如下:
NULLIF(expr1, expr2)
- expr1 和 expr2 是要比較的兩個(gè)表達(dá)式。
示例:
SELECT NULLIF(5, 5); -- 返回 NULL,因?yàn)閮蓚€(gè)值相等 SELECT NULLIF(5, 10); -- 返回 5,因?yàn)閮蓚€(gè)值不相等
2. IFNULL 函數(shù)
IFNULL 函數(shù)用于判斷第一個(gè)表達(dá)式是否為 NULL,如果是,則返回第二個(gè)表達(dá)式的值;否則,返回第一個(gè)表達(dá)式的值。語(yǔ)法如下:
IFNULL(expr1, expr2)
- expr1 是要判斷是否為 NULL 的表達(dá)式。
- expr2 是如果 expr1 為 NULL 時(shí)返回的值。
示例:
SELECT IFNULL(NULL, 'default_value'); -- 返回 'default_value',因?yàn)榈谝粋€(gè)表達(dá)式為 NULL
SELECT IFNULL('not_null_value', 'default_value'); -- 返回 'not_null_value',因?yàn)榈谝粋€(gè)表達(dá)式不為 NULL
3. IF 函數(shù)
IF 函數(shù)用于根據(jù)一個(gè)條件返回兩個(gè)值中的一個(gè)。語(yǔ)法如下:
sqlIF(condition, value_if_true, value_if_false)
- condition 是一個(gè)條件表達(dá)式。
- value_if_true 是如果條件為真時(shí)返回的值。
- value_if_false 是如果條件為假時(shí)返回的值。
示例:
SELECT IF(5 > 3, 'true_value', 'false_value'); -- 返回 'true_value',因?yàn)闂l件為真 SELECT IF(5 < 3, 'true_value', 'false_value'); -- 返回 'false_value',因?yàn)闂l件為假
4. 區(qū)別總結(jié)
- NULLIF 用于比較兩個(gè)表達(dá)式,如果相等則返回 NULL。
- IFNULL 用于判斷一個(gè)表達(dá)式是否為 NULL,是則返回指定的默認(rèn)值。
- IF 用于根據(jù)條件返回兩個(gè)不同的值。
附:mysql函數(shù)IFNULL使用的注意事項(xiàng)
首先建一張簡(jiǎn)單的表,用于sql語(yǔ)句的操作

建表語(yǔ)句如下:
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 '分?jǐn)?shù)' , PRIMARY KEY (`id`) );
手動(dòng)創(chuàng)建數(shù)據(jù)如下:

現(xiàn)在開始正題:
a. IFNULL的作用是什么?下面一個(gè)簡(jiǎn)單的sql和結(jié)果說(shuō)明,如果IFNULL(a,b),a接收的值為null,則返回b,否則返回a;
SELECT IFNULL(NULL,0);

b. 以下sql語(yǔ)句,大家可以預(yù)測(cè)下結(jié)果,按照IFNULL函數(shù)的作用,應(yīng)該返回0才對(duì),可是結(jié)果并不是這樣。
SELECT IFNULL(score,0) FROM student WHERE ID = 4;
返回結(jié)果,居然是null,與預(yù)期的結(jié)果0不一致。

c. 以下語(yǔ)句返回正確結(jié)果0;
SELECT IFNULL((SELECT score FROM student WHERE ID = 4),0);
總結(jié):使用b方式使用IFNULL、SUM函數(shù)等需要確保有查詢記錄,否則也將返回null值,當(dāng)然也可使用c方式避免返回null值,避免程序中出現(xiàn)NPE異常。
總結(jié)
到此這篇關(guān)于MySQL中NULLIF 、IFNULL、IF的用法和區(qū)別的文章就介紹到這了,更多相關(guān)MySQL NULLIF 、IFNULL、IF用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Mysql中isnull,ifnull,nullif的用法及語(yǔ)義詳解
- MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函數(shù)的用法解讀
- MySql中的IFNULL、NULLIF和ISNULL用法詳解
- MySQL流程控制IF()、IFNULL()、NULLIF()、ISNULL()函數(shù)的使用
- MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函數(shù)的使用詳解
- mysql中null(IFNULL,COALESCE和NULLIF)相關(guān)知識(shí)點(diǎn)總結(jié)
- MySql中的IFNULL、NULLIF和ISNULL用法詳解
- MYSQL中IFNULL和NULLIF函數(shù)的區(qū)別小結(jié)
相關(guān)文章
MySQL查詢優(yōu)化:用子查詢代替非主鍵連接查詢實(shí)例介紹
對(duì)多的兩張表,一般是一張表的外鍵關(guān)聯(lián)到另一個(gè)表的主鍵,接下來(lái)為大家介紹下用子查詢代替非主鍵連接查詢,感興趣的朋友可以參考下哈,希望對(duì)你有所幫助2013-04-04
mysql從5.7平滑升級(jí)到8.0.27的實(shí)現(xiàn)
mysql8.0已經(jīng)到了穩(wěn)定期,本文主要介紹了mysql從5.7平滑升級(jí)到8.0.27的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06
RR與RC隔離級(jí)別下索引和鎖的測(cè)試腳本示例代碼
這篇文章主要給大家介紹了關(guān)于RR與RC隔離級(jí)別下索引和鎖的測(cè)試腳本的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12
深入mysql創(chuàng)建自定義函數(shù)與存儲(chǔ)過(guò)程的詳解
本篇文章是對(duì)mysql創(chuàng)建自定義函數(shù)與存儲(chǔ)過(guò)程進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
win7下mysql6.x出現(xiàn)中文亂碼的完美解決方法
本文給大家分享win7下mysql 6.x出現(xiàn)中文亂碼的完美解決方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-04-04
mysql server is running with the --skip-grant-tables option
今天在mysql中新建數(shù)據(jù)庫(kù)提示The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement,原來(lái)是數(shù)據(jù)中配置的--skip-grant-tables,這樣安全就降低了,這個(gè)一般當(dāng)忘記root密碼的時(shí)候需要這樣操作2017-07-07
解決啟動(dòng)MongoDB錯(cuò)誤:error while loading shared libraries: libstdc+
本文提供了解啟動(dòng)MongoDB時(shí)提示:error while loading shared libraries: libstdc++.so.6: cannot open shared object file: 錯(cuò)誤的解決方案2018-10-10
windows環(huán)境下mysql的解壓安裝及備份和還原
這篇文章主要介紹了windows環(huán)境下mysql的解壓安裝及備份和還原,需要的朋友可以參考下2017-09-09

