SQL中用于处理条件逻辑和空值的函数

在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的值;如果phoneNULL,则返回字符串'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的值,然后正常进行奖金计算。

 

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值