首页
技术小册
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基础教程(中)
### 第6章 函数、谓词、CASE表达式 在SQL的广阔世界中,函数、谓词和CASE表达式是构建复杂查询、进行数据转换与条件逻辑处理不可或缺的工具。它们能够极大地增强SQL语句的灵活性和表达能力,使得数据分析和处理变得更加高效和直观。本章将深入探讨这三种强大的SQL特性,并通过实例展示其在实际应用中的价值。 #### 6.1 函数基础 函数是SQL中预定义的或用户自定义的、用于执行特定任务(如计算、数据转换、格式化等)的代码块。根据功能和作用范围的不同,SQL函数大致可以分为以下几类: - **聚合函数**:用于对一组值执行计算并返回单个值,如`SUM()`、`AVG()`、`COUNT()`、`MAX()`、`MIN()`等。 - **标量函数**:对单个值或表达式进行操作,并返回单个值,如字符串处理函数`LENGTH()`、`UPPER()`、`SUBSTRING()`,日期时间函数`YEAR()`、`MONTH()`,以及数学函数`ROUND()`、`FLOOR()`等。 - **窗口函数**(或称为分析函数):在结果集的每一行上执行计算,但能够访问多行数据,如`ROW_NUMBER()`、`RANK()`、`DENSE_RANK()`以及`SUM()`、`AVG()`等聚合函数在OVER子句中的使用。 ##### 示例:使用聚合函数 假设有一个销售数据表`sales`,包含字段`sale_date`(销售日期)、`product_id`(产品ID)和`amount`(销售额)。要计算某个产品的总销售额,可以使用如下SQL语句: ```sql SELECT product_id, SUM(amount) AS total_sales FROM sales WHERE product_id = 'P001' GROUP BY product_id; ``` ##### 示例:使用标量函数 要将`sales`表中的销售日期格式化为“年-月”形式,可以使用`YEAR()`和`MONTH()`函数结合字符串拼接: ```sql SELECT CONCAT(YEAR(sale_date), '-', LPAD(MONTH(sale_date), 2, '0')) AS formatted_date, SUM(amount) AS total_sales FROM sales GROUP BY formatted_date; ``` #### 6.2 谓词详解 谓词是SQL语句中用于条件判断的部分,它决定了哪些行会被包括在查询结果中。谓词通常与WHERE子句一起使用,但也可以在其他需要条件判断的地方(如HAVING子句)出现。SQL中的常见谓词包括比较谓词(如`=`、`<>`、`<`、`>`、`<=`、`>=`)、逻辑谓词(如`AND`、`OR`、`NOT`)、范围谓词(如`BETWEEN...AND`)、空值谓词(如`IS NULL`、`IS NOT NULL`)、存在性谓词(如`EXISTS`)等。 ##### 示例:使用比较谓词和逻辑谓词 查询`sales`表中销售额大于1000且销售日期在2023年1月1日至2023年3月31日之间的记录: ```sql SELECT * FROM sales WHERE amount > 1000 AND sale_date BETWEEN '2023-01-01' AND '2023-03-31'; ``` ##### 示例:使用存在性谓词 查询至少有一次销售额超过5000的产品的ID: ```sql SELECT DISTINCT product_id FROM sales s1 WHERE EXISTS ( SELECT 1 FROM sales s2 WHERE s2.product_id = s1.product_id AND s2.amount > 5000 ); ``` #### 6.3 CASE表达式 CASE表达式是SQL中用于实现条件逻辑的强大工具,它可以在查询的SELECT列表、WHERE子句、ORDER BY子句以及更新或删除语句中使用。CASE表达式通过一系列的条件判断来返回不同的结果,其基本语法如下: ```sql CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE default_result END ``` ##### 示例:在SELECT列表中使用CASE表达式 假设`sales`表还包含一个`region`(地区)字段,我们想要根据销售额给每个销售记录打上等级标签('Low', 'Medium', 'High'): ```sql SELECT sale_date, product_id, amount, CASE WHEN amount <= 1000 THEN 'Low' WHEN amount BETWEEN 1001 AND 5000 THEN 'Medium' ELSE 'High' END AS sales_level FROM sales; ``` ##### 示例:在ORDER BY子句中使用CASE表达式 如果希望根据销售额的不同范围对产品进行排序,可以先使用CASE表达式为每个销售额范围分配一个排序值: ```sql SELECT product_id, SUM(amount) AS total_sales FROM sales GROUP BY product_id ORDER BY CASE WHEN SUM(amount) <= 1000 THEN 1 WHEN SUM(amount) BETWEEN 1001 AND 5000 THEN 2 ELSE 3 END; ``` #### 总结 函数、谓词和CASE表达式是SQL编程中不可或缺的组成部分,它们不仅简化了复杂的数据处理任务,还使得SQL查询更加灵活和强大。通过合理使用这些工具,开发人员可以编写出既高效又易于维护的SQL代码,满足各种复杂的数据分析和处理需求。在实际应用中,掌握这些基础知识并灵活运用,将对提升数据处理效率和准确性起到至关重要的作用。
上一篇:
结合条件一定要写在子查询中
下一篇:
6-1 各种各样的函数
该分类下的相关小册推荐:
高性能的Postgres SQL
SQL基础教程(下)
SQL基础教程(上)
PostgreSQL入门教程