MySQL COALESCE函数
MySQL中的COALESCE()函数用于返回指定表达式系列中的第一个非空值。如果该函数计算后发现所有的值都为null,或者找不到任何非空值,则返回NULL。
语法
使用COALESCE()函数的语法如下:在MySQL中的函数:
COALESCE(value1, value2, value3....., valueN);
在上述语法中,我们可以看到这个函数接受许多参数,当它找到第一个非空的值时,它就返回那个非空值。有时列表中的所有值都是空的;在这种情况下,它返回NULL。
COALESCE()函数与IF_ELSE语句类似,如下所示:
IF (value1!= NULL) THEN
result = value1;
ELSIF (value2 != NULL) THEN
result = value2;
ELSE
result = NULL;
END IF;
参数说明
该函数只接受一个参数,即包含各种值的列表。
value1, value2,…..,valueN: 指定要返回输出中的非空或NULL值的列表的值。
我们可以通过以下示例更清楚地理解它:
CASE1: COALESCE(NULL, NULL);
CASE2: COALESCE(0, NULL);
在这两种情况下,函数始终返回NULL,因为它找不到任何非空值。
MySQL版本支持
COALESCE()函数可以支持以下 MySQL版本 :
让我们通过以下示例来理解 MySQL COALESCE()函数。我们可以直接在 SELECT语句 中使用COALESCE()函数。
示例1
SELECT COALESCE(NULL, 'A', 'B', NULL);
输出
当我们在列表上实现合并函数时,它将输出”A”,因为它是列表中第一个非空值。
示例2
SELECT COALESCE('Mango', 'Apple', 'Orange', NULL);
输出
当我们在列表上实现合并功能时,它将给出输出”Mango”,因为它是列表中第一个非空值。
示例3
SELECT COALESCE(NULL, 1, 2, 'MySQL', NULL, 'JAVA', NULL);
输出
当我们在列表上实现coalesce函数时,它将返回数值”1″,因为它是列表中第一个非空值。
示例4
SELECT COALESCE(NULL, NULL, 'javatpoint', NULL);
输出
当我们在列表上实现coalesce函数时,它将返回”javatpoint”,因为它是列表中第一个非空值。
让我们在MySQL命令行工具中看所有上述示例:
示例5
在这个例子中,我们将了解如何在表数据上使用COALESCE()函数。首先,使用以下语句创建一个名为” employee “的表:
CREATE TABLE employee (
Emp_id INT NOT NULL,
Name VARCHAR(45) NULL,
Designation VARCHAR(45) NULL,
Phone VARCHAR(45) NULL,
Mobile VARCHAR(45) NULL,
Office VARCHAR(45) NULL,
PRIMARY KEY (Emp_id)
);
接下来,使用以下的 INSERT语句 将数据添加到表中:
INSERT INTO employee(Emp_id, Name, Designation, Phone, Mobile, Office)
VALUES (1, 'Peter', 'Engineer', '101-101-101', '111-111-111', '100-100-100'),
(2, 'Joseph', 'Developer', '201-201-201', '222-222-222', NULL),
(3, 'John', 'Leader', '301-301-301', NULL, '300-300-300'),
(4, 'Stephen', 'Scientist', '401-401-401', '444-444-444', '400-400-400'),
(5, 'Suzi', 'Carpenter', NULL, '555-555-555', '500-500-500'),
(6, 'Bob', 'Actor', '601-601-601', '666-666-666', '600-600-600'),
(7, 'Donald', 'Engineer', NULL, NULL, NULL);
执行以下查询以显示表数据:
SELECT * FROM employee;
我们将会得到如下输出:
现在,执行这个语句,使用COALESCE()函数,仅返回具有所有联系号码的员工的手机号码:
SELECT Emp_id, Name, Designation, COALESCE(Mobile, Office, Phone) FROM employee;
它将提供以下输出:
如果员工只有办公室或手机联系方式,则执行此语句来返回办公室号码。如果找不到办公室号码,则返回电话联系方式。
SELECT Emp_id, Name, Designation, Mobile, Office, Phone, COALESCE(Office, Mobile) FROM employee;
我们将得到以下输出:
IFNULL()与COALESCE()函数的区别
这些函数的主要区别是:
IFNULL() | COALESCE() |
---|---|
IFNULL()函数接受两个表达式。在进行评估后,如果第一个表达式不为NULL,则返回第一个表达式;否则,返回第二个表达式。 | COALESCE()函数在指定的一系列表达式中返回第一个非NULL值。如果此函数评估列表中的所有值均为null,或者它找不到任何非null值,则返回NULL。 |