一、ifnull(a,b)

MySQL IFNULL函数是MySQL控制流函数之一,它接受两个参数,如果不是NULL,则返回第一个参数。 否则,IFNULL函数返回第二个参数。

两个参数可以是文字值或表达式。

以下说明了IFNULL函数的语法:

IFNULL(expression_1,expression_2);

如果expression_1不为NULL,则IFNULL函数返回expression_1; 否则返回expression_2的结果。

IFNULL函数根据使用的上下文返回字符串或数字。

如果要返回基于TRUEFALSE条件的值,而不是NULL,则应使用IF函数

1、MySQL的IFNULL函数示例

请参见以下IFNULL函数示例:

示例-1:

SELECT IFNULL(1,0); -- returns 1
示例-2:
SELECT IFNULL('',1); -- returns ''
示例-3: 

SELECT IFNULL(NULL,'IFNULL function'); -- returns IFNULL function

上面示例中的语句是怎么运行的?

  • IFNULL(1,0)返回1,因为1不为NULL
  • IFNULL('',1)返回'',因为''字符串不为NULL
  • IFNULL(NULL,'IFNULL function')返回IFNULL函数字符串,因为第一个参数为NULL
    我们来看一下使用IFNULL函数的实例。

2、IFNULL函数实际应用

2.1首先,使用以下语句创建一个名为contacts的新表:

USE testdb;
CREATE TABLE IF NOT EXISTS contacts (
        contactid INT AUTO_INCREMENT PRIMARY KEY,
        contactname VARCHAR(20) NOT NULL,
        bizphone VARCHAR(15),
        homephone VARCHAR(15)
);

每个联系人都有一个名字,业务电话和家庭电话。

2.2 其次,将数据插入到contacts表中:

INSERT INTO contacts(contactname,bizphone,homephone)
        VALUES('John Doe','(541) 754-3009',NULL),
                        ('Cindy Minsu',NULL,'(541) 754-3110'),
                        ('Sue Greenspan','(541) 754-3010','(541) 754-3011'),
                        ('Lily Bush',NULL,'(541) 754-3111');

2.3、一些联系人只有家庭电话或商务电话。要从contacts表中获取所有联系人姓名和电话,请使用以下查询: 

SELECT
        contactName, bizphone, homephone
FROM
        contacts;

2.4、执行上面查询语句,得到以下结果

ifnull mysql 没起效果 mysql的ifnull函数_database

2.5、如果联系人的商务电话不可用,可以通过查询获得联系人的家庭电话也是一个获取联系方式的办法

SELECT
        contactname, IFNULL(bizphone, homephone) phone
FROM
        contacts;

这可以使用IFNULL()函数来解决。如果bizphoneNULL,则IFNULL函数将返回homephone的值。

2.6第三,使用以下查询获取所有联系人的姓名和电话:

ifnull mysql 没起效果 mysql的ifnull函数_mysql_02

请注意,应避免在WHERE子句中使用IFNULL函数,因为它会降低查询的性能。

如果要检查值是否为NULL,则可以在WHERE子句中使用IS NULLIS NOT NULL

3、leetcode176. 第二高的薪水

ifnull mysql 没起效果 mysql的ifnull函数_ifnull mysql 没起效果_03

解题思路:  

select 
    ifnull(
        (select 
            distinct salary 
        from 
            employee
        order by salary desc
        limit 1,1), null) 
    as SecondHighestSalary

特别注意: 如果是select ifnull((select ~), b)这样写的,一定不要忘了ifnull((), b)中有两个括号, 要不然会报错的;

注意仔细思考一下这两个例题的ifnull()的两种不同的写法;

后期会随时更新!