MySql中的IFNULL、NULLIF和ISNULL用法详解

发布时间:2025-12-09 15:13:48 浏览次数:3

今天用到了MySql里的isnull才发现他和MSSQL里的还是有点区别,现在简单总结一下:

mysql中isnull,ifnull,nullif的用法如下:

isnull(expr)

的用法:

如expr

为null,那么isnull()

的返回值为

1,否则返回值为

0。

mysql>

select

isnull(1+1)

->

0

mysql>

select

isnull(1/0)

->

1

使用=

的null

值对比通常是错误的。

isnull()

函数同

is

null比较 *** 作符具有一些相同的特性。请参见有关is

null

的说明。

IFNULL(expr1,expr2)的用法:

假如expr1

不为

NULL,则

IFNULL()

的返回值为

expr1

否则其返回值为

expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。

mysql>

SELECT

IFNULL(1,0)

->

1

mysql>

SELECT

IFNULL(NULL,10)

->

10

mysql>

SELECT

IFNULL(1/0,10)

->

10

mysql>

SELECT

IFNULL(1/0,'yes')

->

'yes'

IFNULL(expr1,expr2)的默认结果值为两个表达式中更加“通用”的一个,顺序为STRING、

REAL或

INTEGER。假设一个基于表达式的表的情况,

或MySQL必须在内存储器中储存一个临时表中IFNULL()的返回值:

CREATE

TABLE

tmp

SELECT

IFNULL(1,'test')

AS

test;

在这个例子中,测试列的类型为

CHAR(4)。

NULLIF(expr1,expr2)

的用法:

如果expr1

=

expr2

成立,那么返回值为NULL,否则返回值为

expr1。这和CASE

WHEN

expr1

=

expr2

THEN

NULL

ELSE

expr1

END相同。

mysql>

SELECT

NULLIF(1,1)

->

NULL

mysql>

SELECT

NULLIF(1,2)

->

1

如果参数不相等,则

MySQL

两次求得的值为

expr1

''为空字符串或者叫做零长度字符串,其数据类型是明确的,它属于字符型。null是空值表示没有任何东西,其数据类型未知。

''只能写入字符型字段,而null在没有约束的情况下几乎可以写入任何类型字段里。

在mysql中,筛选非空的时候经常会用到is not null和!=null,这两种方法单从字面上来看感觉是差不多的,其实如

果去运行一下试试的话差别会很大!

为什么会出现这种情况呢?

null 表示什么也不是, 不能=、>、<… 所有的判断,结果都是false,所有只能用 is null进行判断。

默认情况下,推荐使用 IS NOT NULL去判断,因为SQL默认情况下对!= Null的判断会永远返回0行,但没有语法错误

如果你一定想要使用!= Null来判断,需要加上这个语句:

set ANSI_NULLS off

这时你会发现IS NOT NULL 和 != null 是等效的

个字段如果设为“NULL”,表示如果这个字段的值为空时,自动插入一个“NULL”值。

一个字段如果设为“NOT NULL”,表示如果这个字段的值为空时,不自动插入“NULL”值(任其无值)。

所以,设为“NULL”的意思反而是“不能无值”(由MYSQL自动赋“NULL”值),而设为“NOT NULL”是“可以无值”

其实要证明这一点很简单,建一个测试表,两个字段(VC型),一个设为“NULL”,一个设为“NOT NULL”,两个都

插入空值,看看结果就明白了。

NULL 不是 '' 也不是 0。

你的字段定义为 not null,但是却赋值了一个 null,那么数据库系统会按照该字段类型选择一个默认的值放进去,

比如 char 就是用空字符串。

但注意,空字符串其实已经是一个确定的值了,就是一个长度为 0 的字符串!

至于 NULL 值,给你一个正确的理解:把 NULL 理解为 UNKNOWN。

主要意思是'不知道',就是它可能是任何值;

另外一层意思是'信息缺失',比如某个存储姓名信息的字段值是 NULL,代表姓名信息缺失。

所以 NULL 值不是任意一个确定的值!

举例来说,逻辑 与/或 运算会的吧?

与运算:true and true = true, true and false = false, false and true = false, false and false =

false

第一个 true and null,它的结果完全靠 null 确定。如果它是 true 结果就是 true,如果它是 false,结果就是

false。因为 null 代表不知道,所以结果也是不知道,所以是 null。

第二个 false and null,它的结果不需要靠 null 确定,因为 and 运算的特性,有 false 出 false,所以结果是

false。

第三个 null and null,就好理解了吧,它完全就是空对空了,两个 *** 作数都是不知道,结果自然也是不知道,所以

是 null。


需要做网站?需要网络推广?欢迎咨询客户经理 13272073477