sql高级语法之case语句

本文通过创建数据库和表格,演示了如何使用SQL的CASE语句进行条件判断和数据处理。包括两种CASE语句的语法格式及其应用实例,帮助读者理解和掌握CASE语句的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.创建数据库

create DATABASE advanced_prac;
use advanced_prac;

2.创建表

CREATE TABLE bonuses_depa1 (--旧奖金表
  staff_id INT NOT NULL, --员工id
  staff_name CHAR(50), --员工名字
  job VARCHAR(30),--员工岗位
  bonus NUMERIC );--津贴
  
CREATE TABLE new_bonuses_depa1 (--新奖金表
  staff_id INT NOT NULL, 
  staff_name CHAR(50), 
  job VARCHAR(30),
  bonus NUMERIC );

插入数据
旧表

INSERT INTO bonuses_depa1(staff_id, staff_name, job, bonus) VALUES(23,'wangxia','developer',5000);
INSERT INTO bonuses_depa1(staff_id, staff_name, job, bonus) VALUES(24,'limingying','tester',7000); 
INSERT INTO bonuses_depa1(staff_id, staff_name, job, bonus) VALUES(25,'liulili','quality control', 8000);
INSERT INTO bonuses_depa1(staff_id, staff_name, job, bonus) VALUES(29,'liuxue','tester',8000); 
INSERT INTO bonuses_depa1(staff_id, staff_name, job, bonus) VALUES(21,'caoming','document developer',11000); 

新表

INSERT INTO new_bonuses_depa1(staff_id, staff_name, job, bonus) VALUES(23,'wangxia','developer', 7000); 
INSERT INTO new_bonuses_depa1(staff_id, staff_name, job, bonus) VALUES(27,'wangxuefen','document developer',7000); 
INSERT INTO new_bonuses_depa1(staff_id, staff_name, job, bonus) VALUES(28,'denghui','quality control',8000); 
INSERT INTO new_bonuses_depa1(staff_id, staff_name, job, bonus) VALUES(25,'liulili','quality control',10000); 
INSERT INTO new_bonuses_depa1(staff_id, staff_name, job, bonus) VALUES(21,'caoming','document developer',12000);

查询表bonuses_depa1中的数据。

SELECT * FROM bonuses_depa1;

返回结果:
在这里插入图片描述
查询表new_bonuses_depa1中的数据。

SELECT * FROM new_bonuses_depa1;

返回结果:
在这里插入图片描述

3.CASE语句

case表达式的返回类型是所有返回值的兼容聚合类型,而且取决于使用它的上下文。如果在上下文中使用字符串,结果将返回为字符串。如果在上下文中使用数字,结果返回为十进制、实数或整数值。

语法格式1

CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...][ELSE result] END

要求:当compare_value被满足时,返回对应的result,否则返回ELSE语句后的result,如果没有ELSE语句,则返回NULL

示例

查询bonuses_depa1表,如果staff_name为“wangxia”则输出漂亮,如果staff_name为“liulili”则输出愚蠢,其余输出“普通”。
sql语句

SELECT bd.STAFF_NAME,--查询项
CASE bd.STAFF_NAME --比较的项
WHEN 'wangxia' THEN '漂亮'--如果是“wangxia”输出“漂亮”
WHEN 'liulili' THEN '愚蠢'--如果是“liulili”输出“愚蠢”
ELSE '普通' --其余输出普通
END AS EVALUATE --输出项别名
FROM bonuses_depa1 bd; --查询的表以及起的别名

执行结果
在这里插入图片描述

语法格式2

CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...][ELSE result] END

当condition被满足时,返回对应的result,否则返回ELSE语句后的result,如果没有ELSE语句,则返回NULL

示例

要求:比较两表new_bonuses_depa1和bonuses_depa1的津贴数据,对比员工津贴变化情况。
sql语句

SELECT bd.STAFF_NAME, --查询此表项
CASE --case语句开始
WHEN nbd.BONUS > bd.BONUS THEN 'increased' --如果nbd.BONUS > bd.BONUS时输出'increased'
WHEN nbd.BONUS = bd.BONUS THEN 'equal' --如果nbd.BONUS = bd.BONUS时输出'equal'
ELSE 'decreased' --否则输出'decreased'
END AS DIFF --case语句结束,并将输出结果列取别名DIFF
FROM new_bonuses_depa1 nbd, bonuses_depa1 bd --分别给两个表起别名
WHERE nbd.STAFF_ID = bd.STAFF_ID--两表联系条件(员工id相同)

输出结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

齊 天 大 聖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值