首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第4章 数据更新
4-1 数据的插入(INSERT语句的使用方法)
什么是INSERT
INSERT语句的基本语法
列清单的省略
插入NULL
插入默认值
从其他表中复制数据
4-2 数据的删除(DELETE语句的使用方法)
DROP TABLE语句和DELETE语句
DELETE语句的基本语法
指定删除对象的DELETE语句(搜索型DELETE)
4-3 数据的更新(UPDATE语句的使用方法)
UPDATE语句的基本语法
指定条件的UPDATE语句(搜索型UPDATE)
使用NULL进行更新
多列更新
4-4 事务
什么是事务
创建事务
ACID特性
第5章 复杂查询
5-1 视图
视图和表
创建视图的方法
视图的限制① ——定义视图时不能使用ORDER BY子句
视图的限制② ——对视图进行更新
删除视图
5-2 子查询
子查询和视图
子查询的名称
标量子查询
标量子查询的书写位置
使用标量子查询时的注意事项
5-3 关联子查询
普通的子查询和关联子查询的区别
关联子查询也是用来对集合进行切分的
结合条件一定要写在子查询中
第6章 函数、谓词、CASE表达式
6-1 各种各样的函数
函数的种类
算术函数
字符串函数
日期函数
转换函数
6-2 谓词
什么是谓词
LIKE谓词——字符串的部分一致查询
BETWEEN谓词——范围查询
IS NULL、IS NOT NULL——判断是否为NULL
IN谓词——OR的简便用法
使用子查询作为IN谓词的参数
EXIST谓词
6-3 CASE表达式
什么是CASE表达式
CASE表达式的语法
CASE表达式的使用方法
第7章 集合运算
7-1 表的加减法
什么是集合运算
表的加法——UNION
集合运算的注意事项
包含重复行的集合运算——ALL选项
选取表中公共部分——INTERSECT
记录的减法——EXCEPT
7-2 联结(以列为单位对表进行联结)
什么是联结
内联结——INNER JOIN
外联结——OUTER JOIN
3张以上的表的联结
交叉联结——CROSS JOIN
联结的特定语法和过时语法
当前位置:
首页>>
技术小册>>
SQL基础教程(中)
小册名称:SQL基础教程(中)
### 章节:什么是CASE表达式 在SQL(Structured Query Language,结构化查询语言)中,`CASE`表达式是一种强大的控制流语句,它允许在查询的SELECT列表、WHERE子句、ORDER BY子句或任何允许表达式的地方进行条件逻辑判断。`CASE`表达式类似于其他编程语言中的if-else或switch语句,但它更加灵活且适用于SQL查询的上下文。通过`CASE`表达式,我们可以根据一列或多列的值来决定查询结果的输出,实现数据的条件格式化、分类汇总等复杂操作。 #### 一、`CASE`表达式的基本语法 `CASE`表达式有两种基本形式:简单`CASE`表达式和搜索`CASE`表达式。 **1. 简单`CASE`表达式** 简单`CASE`表达式通过比较一个表达式与一系列的值来工作,当找到匹配的值时,就返回与之对应的结果。其基本语法如下: ```sql CASE input_expression WHEN when_expression1 THEN result_expression1 WHEN when_expression2 THEN result_expression2 ... ELSE else_result_expression END ``` - `input_expression` 是要与各个`when_expression`进行比较的表达式。 - `when_expressionN` 是与`input_expression`进行比较的值或表达式。 - `result_expressionN` 是当`input_expression = when_expressionN`为真时返回的结果。 - `ELSE` 子句是可选的,用于当没有任何`when_expression`与`input_expression`匹配时返回的结果。 **示例**:假设有一个员工表`Employees`,包含字段`EmployeeID`、`Name`和`DepartmentID`,我们想根据`DepartmentID`的值给员工分类。 ```sql SELECT Name, CASE DepartmentID WHEN 1 THEN 'IT部门' WHEN 2 THEN '销售部门' WHEN 3 THEN '人力资源部门' ELSE '其他部门' END AS DepartmentName FROM Employees; ``` **2. 搜索`CASE`表达式** 搜索`CASE`表达式使用一系列的布尔表达式(而不是单一表达式与多个值的比较)来确定哪个结果表达式应该被返回。其基本语法如下: ```sql CASE WHEN condition1 THEN result_expression1 WHEN condition2 THEN result_expression2 ... ELSE else_result_expression END ``` - `conditionN` 是需要评估的布尔表达式。 - `result_expressionN` 是当`conditionN`为真时返回的结果。 - `ELSE` 子句同样是可选的。 **示例**:继续使用上面的`Employees`表,但这次我们想根据员工的薪资(假设有一个`Salary`字段)来给出他们的薪资等级。 ```sql SELECT Name, Salary, CASE WHEN Salary < 3000 THEN '初级' WHEN Salary BETWEEN 3000 AND 7000 THEN '中级' WHEN Salary > 7000 THEN '高级' ELSE '未知' END AS SalaryLevel FROM Employees; ``` #### 二、`CASE`表达式的应用场景 `CASE`表达式因其灵活性和强大的功能,在SQL查询中有广泛的应用场景。 **1. 数据分类与格式化** 如上例所示,`CASE`表达式常用于将数据库中的原始数据转换为更易于理解或符合特定需求的形式。无论是根据部门ID分类员工,还是根据薪资范围划分薪资等级,`CASE`表达式都能轻松实现。 **2. 条件聚合** 在进行数据汇总时,`CASE`表达式可以与聚合函数(如SUM、AVG、COUNT等)结合使用,实现基于条件的聚合计算。例如,计算不同部门的平均工资或统计不同薪资等级的员工数量。 **示例**:计算不同部门的员工总数。 ```sql SELECT CASE DepartmentID WHEN 1 THEN 'IT部门' WHEN 2 THEN '销售部门' WHEN 3 THEN '人力资源部门' ELSE '其他部门' END AS DepartmentName, COUNT(*) AS NumberOfEmployees FROM Employees GROUP BY CASE DepartmentID WHEN 1 THEN 'IT部门' WHEN 2 THEN '销售部门' WHEN 3 THEN '人力资源部门' ELSE '其他部门' END; ``` **3. 排序优化** 在`ORDER BY`子句中使用`CASE`表达式,可以根据自定义的逻辑对数据进行排序。这在进行复杂排序时特别有用,比如优先展示特定条件下的数据。 **示例**:假设我们想在查询员工信息时,将特定部门的员工排在前面。 ```sql SELECT Name, DepartmentID FROM Employees ORDER BY CASE WHEN DepartmentID = 1 THEN 0 ELSE 1 END, Name; ``` 这个查询会将`DepartmentID`为1的员工排在前面,其他部门的员工按照`Name`字段排序。 #### 三、注意事项 - **性能考虑**:虽然`CASE`表达式非常强大,但在处理大量数据时,其性能可能会受到影响。特别是在`WHERE`子句或复杂聚合查询中频繁使用`CASE`时,应考虑查询优化。 - **可读性**:为了提高代码的可读性和可维护性,建议在使用`CASE`表达式时,保持逻辑清晰,避免过深的嵌套或过于复杂的条件判断。 - **兼容性**:虽然大多数数据库系统(如MySQL、PostgreSQL、SQL Server等)都支持`CASE`表达式,但具体语法和性能表现可能有所不同。在跨数据库平台开发时,应注意检查各平台的具体实现。 #### 四、结论 `CASE`表达式是SQL中一个不可或缺的工具,它提供了在查询过程中进行条件逻辑判断的能力。无论是数据分类、条件聚合还是排序优化,`CASE`表达式都能以简洁而强大的方式实现复杂的业务需求。掌握`CASE`表达式的使用,对于提升SQL查询的灵活性和效率具有重要意义。希望本章内容能帮助你更好地理解和应用`CASE`表达式,在数据管理和分析中发挥更大的作用。
上一篇:
6-3 CASE表达式
下一篇:
CASE表达式的语法
该分类下的相关小册推荐:
高性能的Postgres SQL
SQL基础教程(上)
SQL基础教程(下)
PostgreSQL入门教程