首页
技术小册
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-1 各种各样的函数 在SQL的世界里,函数是不可或缺的一部分,它们如同工具箱中的各类工具,帮助开发者高效地完成数据处理任务。无论是简单的数值计算、字符串操作,还是复杂的日期时间处理和聚合分析,SQL都提供了丰富的函数库来满足这些需求。本章节将深入探讨SQL中不同类型的函数,包括数值函数、字符串函数、日期和时间函数、聚合函数以及条件逻辑函数等,旨在让读者能够熟练掌握并灵活运用这些工具。 #### 6.1.1 数值函数 数值函数主要用于执行数学运算或处理数值数据。常见的数值函数包括四舍五入、取整、绝对值等。 - **ROUND()**:四舍五入函数,可以将数值四舍五入到指定的小数位数。例如,`SELECT ROUND(123.4567, 2);` 结果为 `123.46`。 - **FLOOR()**:向下取整函数,返回不大于参数的最大整数。例如,`SELECT FLOOR(123.456);` 结果为 `123`。 - **CEIL() 或 CEILING()**:向上取整函数,返回不小于参数的最小整数。例如,`SELECT CEIL(123.456);` 结果为 `124`。 - **ABS()**:绝对值函数,返回参数的绝对值。例如,`SELECT ABS(-123.45);` 结果为 `123.45`。 - **MOD() 或 %**:取模运算符,返回两数相除的余数。注意,在某些SQL方言中,%也用作取模运算符。例如,`SELECT MOD(10, 3);` 或 `SELECT 10 % 3;` 结果为 `1`。 #### 6.1.2 字符串函数 字符串函数用于处理文本数据,如拼接、截取、替换、转换大小写等。 - **CONCAT()**:字符串拼接函数,将多个字符串值连接成一个字符串。例如,`SELECT CONCAT('Hello', ' ', 'World');` 结果为 `'Hello World'`。 - **SUBSTRING() 或 MID()**:字符串截取函数,从字符串中提取子串。`SUBSTRING(str, pos, len)` 或 `MID(str, pos, len)` 中,`str` 是原始字符串,`pos` 是开始位置(通常从1开始),`len` 是要提取的字符数。例如,`SELECT SUBSTRING('Hello World', 7, 5);` 结果为 `'World'`。 - **REPLACE()**:字符串替换函数,在字符串中替换指定的子串。例如,`SELECT REPLACE('Hello World', 'World', 'SQL');` 结果为 `'Hello SQL'`。 - **UPPER() 和 LOWER()**:分别将字符串转换为大写或小写。例如,`SELECT UPPER('hello world');` 结果为 `'HELLO WORLD'`,而 `SELECT LOWER('HELLO WORLD');` 结果为 `'hello world'`。 - **TRIM()**:去除字符串两端的空格或指定字符。例如,`SELECT TRIM(' Hello World ');` 结果为 `'Hello World'`。 #### 6.1.3 日期和时间函数 日期和时间函数用于处理日期和时间值,如获取当前日期、时间,计算时间差,格式化日期等。 - **CURDATE() 和 NOW()**:`CURDATE()` 返回当前日期(不包含时间),而 `NOW()` 返回当前的日期和时间。 - **DATE_ADD() 和 DATE_SUB()**:用于日期加减。例如,`SELECT DATE_ADD('2023-01-01', INTERVAL 1 MONTH);` 结果为 `'2023-02-01'`。 - **DATEDIFF()**:计算两个日期之间的天数差。例如,`SELECT DATEDIFF('2023-01-31', '2023-01-01');` 结果为 `30`。 - **YEAR(), MONTH(), DAY()**:分别提取日期中的年、月、日部分。 - **FORMAT()**:用于日期/时间的格式化显示。虽然它不是专属于日期时间的函数,但常用于此目的。 #### 6.1.4 聚合函数 聚合函数用于对一组值执行计算,并返回单个值。它们常用于GROUP BY语句中。 - **COUNT()**:计算行数或指定列中非NULL值的数量。 - **SUM()**:计算数值列的总和。 - **AVG()**:计算数值列的平均值。 - **MAX() 和 MIN()**:分别找出某列的最大值和最小值。 - **GROUP_CONCAT()**:将来自多个记录的列值连接成一个字符串结果。注意,这个函数在某些数据库系统中可能不是标准的SQL函数。 #### 6.1.5 条件逻辑函数 条件逻辑函数根据条件对值进行选择和转换,常见的包括IF()、CASE WHEN...THEN...ELSE...END等。 - **IF()**:简单的条件判断函数。如果第一个参数为真(非零、非空),则返回第二个参数的值;否则返回第三个参数的值。例如,`SELECT IF(1>0, 'True', 'False');` 结果为 `'True'`。 - **CASE WHEN...THEN...ELSE...END**:更灵活的条件判断结构,可以处理多个条件。例如,`SELECT CASE WHEN score >= 90 THEN 'A' WHEN score >= 60 THEN 'B' ELSE 'C' END AS grade FROM grades;` #### 进阶应用与注意事项 - **函数嵌套**:SQL允许函数的嵌套使用,即一个函数的输出可以作为另一个函数的输入。这极大地增强了SQL的表达能力,但也需注意避免过度嵌套导致的性能问题。 - **函数与性能**:虽然函数提供了强大的数据处理能力,但不当的使用(如在大规模数据集上对每行数据都使用复杂函数)可能会影响查询性能。优化时,应考虑是否可以通过调整表结构、索引或查询逻辑来减少对函数的依赖。 - **SQL方言差异**:不同数据库系统(如MySQL、PostgreSQL、SQL Server等)在函数支持和语法上可能存在差异。因此,在编写跨数据库兼容的SQL代码时,需特别注意这些差异。 - **安全性与数据类型**:使用函数时,应确保传递给函数的参数类型与函数期望的类型相匹配,以避免运行时错误。同时,在处理用户输入或外部数据时,应考虑到安全性问题,如SQL注入等。 综上所述,SQL中的函数种类繁多,功能强大,是进行数据处理和分析不可或缺的工具。掌握并灵活运用这些函数,将极大提升SQL编程的效率和灵活性。希望本章节的介绍能为您的SQL学习之旅增添助力。
上一篇:
第6章 函数、谓词、CASE表达式
下一篇:
函数的种类
该分类下的相关小册推荐:
高性能的Postgres SQL
SQL基础教程(下)
SQL基础教程(上)
PostgreSQL入门教程