在SQL中,CASE WHEN语句、COALESCE函数、IF函数(在某些数据库系统中,如MySQL)、IFNULL函数(同样在MySQL等中)以及NULLIF函数都是用于处理条件逻辑和空值(NULL)的重要工具。
下面分别介绍这些函数,并提供相应的使用示例。
CASE WHEN语句
CASE WHEN是SQL中的条件表达式,允许你根据一系列条件来返回值。其基本语法如下:
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE result END
示例:
假设我们有一个employees表,其中包含员工的first_name(名)、last_name(姓)和salary(薪资)列。我们想根据员工的薪资将他们分为'High'、'Medium'和'Low'三个等级。
SELECT
first_name,
last_name,
salary,
CASE
WHEN salary > 50000 THEN 'High' -- 如果薪资大于50000,返回'High'
WHEN salary BETWEEN 30000 AND 50000 THEN 'Medium' -- 如果薪资在30000到50000之间,返回'Medium'
ELSE 'Low' -- 如果上述条件都不满足,返回'Low'
END AS salary_bracket -- 将结果列命名为salary_bracket
FROM employees
COALESCE函数
COALESCE函数接受一系列参数,并返回这些参数中的第一个非空值。如果所有参数都是NULL,则返回NULL。
示例:
使用employees表,假设我们想要返回员工的名字和联系方式,但如果电话(phone)为空,我们希望返回电子邮件(email),如果两者都为空,则返回'N/A'。
SELECT
first_name,
last_name,
COALESCE(phone, email, 'N/A') AS contact_info -- 返回第一个非空值:phone、email或'N/A'
FROM employees;
在这个查询中,COALESCE函数会检查phone、email和字符串'N/A'。它首先返回phone的值,除非phone是NULL,在这种情况下它会返回email的值,如果email也是NULL,则最终返回'N/A'。
IF函数(主要在MySQL中)
IF函数在MySQL中用于进行简单的条件判断,并返回两个结果之一。
示例:
在MySQL中,IF函数用于简单的条件逻辑。使用employees表,我们可以根据薪资是否高于50000来标记员工。
SELECT
first_name,
last_name,
salary,
IF(salary > 50000, 'Above Average', 'Average or Below') AS salary_status -- 如果薪资大于50000,返回'Above Average',否则返回'Average or Below'
FROM employees;
这里,IF函数检查每个员工的薪资。如果薪资大于50000,它返回'Above Average';否则,它返回'Average or Below'。
IFNULL函数(主要在MySQL中)
IFNULL函数接受两个参数,如果第一个参数不是NULL,则返回第一个参数的值;否则返回第二个参数的值。
示例:
使用employees表,假设我们想要选择所有员工的名字和电话号码,但如果电话号码为空,我们想要显示'N/A'。
SELECT
first_name,
last_name,
IFNULL(phone, 'N/A') AS contact_phone -- 如果phone不是NULL,则返回phone;否则返回'N/A'
FROM employees;
在这个查询中,IFNULL
函数检查phone
列的值。如果phone
不是NULL
,则返回phone
的值;如果phone
是NULL
,则返回字符串'N/A'。
NULLIF函数
NULLIF函数比较两个表达式的值,如果它们相等,则返回NULL;否则返回第一个表达式的值。
示例:
NULLIF函数在比较两个值时很有用,如果它们相等,则返回NULL。假设我们有一个场景,在计算奖金时,我们不希望给薪资为0的员工发放奖金。
SELECT
first_name,
last_name,
salary,
(bonus * NULLIF(salary, 0)) AS adjusted_bonus -- 如果salary为0,则返回NULL(这将导致整个表达式结果为NULL);否则返回bonus * salary
FROM employees;
在这个例子中,NULLIF函数比较salary和0。如果它们相等(即salary为0),则NULLIF返回NULL,这会导致adjusted_bonus的计算结果为NULL(因为任何数与NULL相乘都是NULL)。如果salary不为0,NULLIF返回salary的值,然后正常进行奖金计算。
标签:salary,返回,name,空值,phone,SQL,条件逻辑,NULL,函数 From: https://blog.csdn.net/m0_58552717/article/details/140448064