首页 > 数据库 >SQL中用于处理条件逻辑和空值的函数

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

时间:2024-07-18 20:54:53浏览次数:13  
标签:salary 返回 name 空值 phone SQL 条件逻辑 NULL 函数

在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的值,然后正常进行奖金计算。

 

标签:salary,返回,name,空值,phone,SQL,条件逻辑,NULL,函数
From: https://blog.csdn.net/m0_58552717/article/details/140448064

相关文章

  • mysql触发器模板
    --当我们对dept表中的数据进行insertdeleteupdate的时候,请将这些操作记录到日志表当中--dept的表结构/*CREATETABLE`dept`(`DEPTNO`intNOTNULLCOMMENT'部门编号',`DNAME`varchar(14)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciDEFAULTNULLCOMMEN......
  • 通过脚本,将MySQL数据转换成单条insert语句
    通过命令,导出数据:SELECT*FROMusersINTOOUTFILE'/tmp/users_data.sql'FIELDSTERMINATEDBY','LINESTERMINATEDBY'\n';通过脚本,转成insert语句:#!/bin/envpython#-*-encoding:utf-8-*-#数据导出命令,注意修改表名#SELECT*FROMusersINTOOU......
  • Linux安装mysql(超详细版)
    步骤1:新建一个文件夹,专放从网络下载的文件[root@iZ2zeh6vyxsq620zifz8jaZhome]#mkdirsoft#在根目录下创建也可以步骤2:切换目录,进入soft文件中[root@iZ2zeh6vyxsq620zifz8jaZ/]#cdhome/#若第一步文件建在根目录则执行该语句,否则不执行[root@iZ2zeh6vyxsq620zif......
  • MySQL与地震学:地震波形数据的实时分析宝典
    ......
  • mysql8在CentOS8上安装实践
    一、下载https://dev.mysql.com/downloads/mysql/历史版本:https://downloads.mysql.com/archives/community/二、解压tar-zxvf/opt/software/mysql-8.0.33-linux-glibc2.28-x86_64.tar.gz-C/usr/local修改mysql目录名称mv/usr/local/mysql-8.0.33-linux-glibc2......
  • CentOS9中MySQL8数据库备份--增量备份方案
    1.关于备份:MySQL中有完全备份、增量备份和差异备份三种常见的备份策略,这次使用增量备份定义:增量备份仅备份自上一次备份(无论是完全备份还是增量备份)以来发生变化的数据。特点:依赖于上一次备份,仅备份变化的部分,因此备份文件较小,但恢复时需要结合之前的备份。优点:备份文件......
  • 数据库MySQL指令
    数据库之搭建1、rpm-qa|grep服务名称案例:rpm-qa|grepmysql2、将所有msyql的包删除干净删除方法:(1)yumremovemysql*删除linux中的数据库(2)yumerase包名,删除linux中的数据库(3)rpm-e--nodeps包名删除linux中的数据库3、mysql的安装a.安装客户端yuminstallmysq......
  • idea内置数据库 + sql语句库表操作
    sql语句--查询所有数据库showdatabases;--ddl:表结构--创建:基本语法(无约束)--注释:comment'id,唯一标识'createtabletb_user(idintcomment'id,唯一标识',usernamevarchar(20)comment'用户名',namevarchar(10)comment'姓名',......
  • Postgresql主键自增的方法
    Postgresql主键自增的方法一.方法(一)使用 serialPRIMARYKEY插入数据 二.方法(二)......
  • MySQL物理备份-XtraBackup远程备份恢复
    总括:模拟从库故障,从主库备份数据恢复从库,把主库数据远程备份到从库。1.主从库安装xtrabackup工具#安装依赖sudoyuminstallperl-DBIperl-DBD-MySQLperl-IO-Socket-SSLperl-Digest-MD5perl-TermReadKeyqpress#依赖包下载地址https://repo.percona.com/yum/releas......