📅  最后修改于: 2020-11-19 02:10:20             🧑  作者: Mango
MySQL中的COALESCE()函数用于返回指定系列表达式中的第一个非空值。如果此函数计算列表的所有值均为null,或者找不到任何非null值,则它将返回NULL。
以下是在MySQL中使用COALESCE()函数的语法:
COALESCE(value1, value2, value3....., valueN);
在以上语法中,我们可以看到该函数带有许多参数,并且当它找到非null的第一个值时,它将返回该非null值。有时列表的所有值都为空;在这种情况下,它将返回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或NULL值。
我们可以通过下图更清楚地了解它:
情况1:COALESCE(NULL,NULL);
案例2:COALESCE(0,NULL);
在这两种情况下,该函数始终返回NULL,因为它找不到任何非null值。
COALESCE()函数可以支持以下MySQL版本:
让我们通过以下示例了解MySQL COALESCE()函数。我们可以直接在SELECT语句中使用COALESCE()函数。
SELECT COALESCE(NULL, 'A', 'B', NULL);
输出量
当我们在列表上实现合并函数时,它将给出输出“ A”,因为它是列表的第一个非空值。
SELECT COALESCE('Mango', 'Apple', 'Orange', NULL);
输出量
当我们在列表上实现合并函数时,它将给出输出“ Mango”,因为它是列表的第一个非空值。
SELECT COALESCE(NULL, 1, 2, 'MySQL', NULL, 'JAVA', NULL);
输出量
当我们在列表上实现合并函数时,它将返回数值“ 1”,因为它是列表的第一个非空值。
SELECT COALESCE(NULL, NULL, 'javatpoint', NULL);
输出量
当我们在列表上实现合并函数时,它将返回“ javatpoint”,因为它是列表的第一个非空值。
让我们在MySQL命令行工具中查看以上所有示例:
在此示例中,我们将了解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() function takes only two expressions. After doing an evaluation, it returns the first expression if this expression is not NULL; otherwise, it returns the second expression. | The COALESCE() function return first non-null value in a specified series of expression. If this function evaluates all values of the list are null, or it does not find any non-null value, then it returns NULL. |