MySQL ifnull()函數

在本教學中,您將瞭解MySQL IFNULL()函數,這是一個非常方便的控制流函數來處理NULL值。

MySQL IFNULL函數簡介

MySQL IFNULL函數是MySQL控制流函數之一,它接受兩個參數,如果不是NULL,則返回第一個參數。 否則,IFNULL函數返回第二個參數。

兩個參數可以是文字值或運算式。

以下說明了IFNULL函數的語法:

IFNULL(expression_1,expression_2);

如果expression_1不為NULL,則IFNULL函數返回expression_1; 否則返回expression_2的結果。

IFNULL函數根據使用的上下文返回字串或數字。

如果要返回基於TRUEFALSE條件的值,而不是NULL,則應使用IF函數

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函數的實例。

首先,使用以下語句創建一個名為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)
);

每個聯繫人都有一個名字,業務電話和家庭電話。

其次,將數據插入到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');

一些聯繫人只有家庭電話或商務電話。要從contacts表中獲取所有聯繫人姓名和電話,請使用以下查詢:

SELECT
    contactName, bizphone, homephone
FROM
    contacts;

執行上面查詢語句,得到以下結果 -

+---------------+----------------+----------------+
| contactName   | bizphone       | homephone      |
+---------------+----------------+----------------+
| 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 |
+---------------+----------------+----------------+
4 rows in set

如果聯繫人的商務電話不可用,可以通過查詢獲得聯繫人的家庭電話也是一個獲取聯繫方式的辦法 -

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

這可以使用IFNULL()函數來解決。如果bizphoneNULL,則IFNULL函數將返回homephone的值。

第三,使用以下查詢獲取所有聯繫人的姓名和電話:

mysql> SELECT
    contactname, IFNULL(bizphone, homephone) phone
FROM
    contacts;
+---------------+----------------+
| contactname   | phone          |
+---------------+----------------+
| John Doe      | (541) 754-3009 |
| Cindy Minsu   | (541) 754-3110 |
| Sue Greenspan | (541) 754-3010 |
| Lily Bush     | (541) 754-3111 |
+---------------+----------------+
4 rows in set

請注意,應避免在WHERE子句中使用IFNULL函數,因為它會降低查詢的性能。

如果要檢查值是否為NULL,則可以在WHERE子句中使用IS NULLIS NOT NULL

在本教學中,我們向您介紹了MySQL IFNULL函數,並向您展示了如何在查詢中使用IFNULL函數。


上一篇: MySQL函數 下一篇: MySQL+Node.js連接和操作