sql高级语法之case语句

简介: 代码如下

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;

返回结果:

2345_image_file_copy_597.jpg

查询表new_bonuses_depa1中的数据。

SELECT * FROM new_bonuses_depa1;

返回结果:

2345_image_file_copy_598.jpg

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; --查询的表以及起的别名

执行结果

2345_image_file_copy_599.jpg

语法格式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相同)

输出结果

2345_image_file_copy_600.jpg

相关文章
|
3天前
|
SQL 存储 关系型数据库
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
本文详细介绍了MySQL中的SQL语法,包括数据定义(DDL)、数据操作(DML)、数据查询(DQL)和数据控制(DCL)四个主要部分。内容涵盖了创建、修改和删除数据库、表以及表字段的操作,以及通过图形化工具DataGrip进行数据库管理和查询。此外,还讲解了数据的增、删、改、查操作,以及查询语句的条件、聚合函数、分组、排序和分页等知识点。
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
|
4月前
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之如何在SQL语句里使用CASE WHEN语句
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
123 2
|
1月前
|
SQL 存储 关系型数据库
SQL `CREATE DATABASE` 语法
【11月更文挑战第10天】
64 3
|
1月前
|
SQL 关系型数据库 数据库
sql语法
【10月更文挑战第26天】sql语法
38 5
|
2月前
|
SQL 数据库
SQL数据库基础语法入门
[link](http://www.vvo.net.cn/post/082935.html)
|
2月前
|
SQL 存储 关系型数据库
mysql SQL必知语法
本文详细介绍了MySQLSQL的基本语法,包括SELECT、FROM、WHERE、GROUPBY、HAVING、ORDERBY等关键字的使用,以及数据库操作如创建、删除表,数据类型,插入、查询、过滤、排序、连接和汇总数据的方法。通过学习这些内容,读者将能更好地管理和操
39 0
|
2月前
|
SQL 关系型数据库 MySQL
Mysql(2)—SQL语法详解
SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准编程语言。它主要用于数据的查询、插入、更新和删除等操作。SQL最初在1970年代由IBM的研究人员开发,旨在处理关系数据模型。
43 0
|
3月前
|
SQL
SQL: 巧妙使用CASE WHEN实现查询
文章演示了如何利用SQL中的CASE WHEN语句来有效地进行条件性聚合查询,通过具体示例展示了CASE WHEN在统计分析中的应用技巧。
86 0
|
4月前
|
SQL 关系型数据库 MySQL
INSERT INTO t_a.tableName SELECT * FROM t_b.tableName 如何通过定义一个list对象,包含多个tableName,循环执行前面的sql,用MySQL的语法写
【8月更文挑战第7天】INSERT INTO t_a.tableName SELECT * FROM t_b.tableName 如何通过定义一个list对象,包含多个tableName,循环执行前面的sql,用MySQL的语法写
53 5
|
4月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
523 0