进阶操作 第 9-13 章
正则表达式
-
作用:匹配文本
-
基本字符匹配:SELECT 列名 FROM 表名 WHERE 列名 REGEXP ‘值’ ORDER BY 子句名
- . 特殊字符表匹配任意一个字符,如‘.000’可匹配 1000 和 2000,etc
- 与 LIKE 匹配的区别:出现的匹配文本,其相应行将被 REGEXP 返回
- 默认匹配不区分大小写,使用 BINARY 可区分大小写
-
OR 匹配:SELECT 列名 FROM 表名 WHERE 列名 REGEXP ‘值 1 | 值 2’ ORDER BY 子句名
- 匹配一组特定字符:SELECT 列名 FROM 表名 WHERE 列名 REGEXP ‘[值 1 值 2 值 3]’ ORDER BY 子句名
-
匹配范围:SELECT 列名 FROM 表名 WHERE 列名 REGEXP ‘[值 1 - 值 2]’ ORDER BY 子句名
-
匹配特殊字符:SELECT 列名 FROM 表名 WHERE 列名 REGEXP ‘\.’ ORDER BY 子句名
- 引用元字符:\f 换页 \n \r 回车 \t \v 横、纵向制表
- 匹配反斜杠:\\
- 解释:第一个反斜杠由 Mysql 解释,第二个才是正则表达式解释
-
匹配字符类 character class(P58)
-
匹配多个实例:如结尾 s 可选用?
-
匹配特定位置文本:定位符
- ^ 文本开始 $ 文本结尾 :<: 词的开始 :>: 词的结尾
- 注意 ^ 的另一种用法是集合中作 [] 取和
- 可以配套使用 ^$,使用法同 LIKE
- ^ 文本开始 $ 文本结尾 :<: 词的开始 :>: 词的结尾
-
正则表达式的测试:使用 SELECT,返回 1 匹配,反之不匹配
- 优点:无需调用数据库表
计算字段
1、字段 field:意义同列,用于计算字段的连接
2、拼接 concatenate:联结值成为一个单个值
-
实际操作:在 SELECT 中使用 Concat () 函数
- SELECT Concat (值 1,值 2) FROM 表名 ORDER BY 子句名
- 或使用 RTrim () / LTrim () 函数,可删除数据右侧 / 左侧多余空格来整理数据
3、别名 alias / 导出列 derived column:字段或值的替换名
-
SELECT Concat (值 1,值 2) AS 别名 FROM 表名 ORDER BY 子句名
4、基本计算:四则运算符
-
测试计算:省略 FROM 子句
数据处理函数
1、可移植性:多数函数不同 SQL 存在差异,做好注释
2、文本处理(P69)
-
Left / Right ():返回左 / 右侧字符
-
Length ():返回串长
-
Locate ():找出某子串
-
SubString ():返回子串字符
-
Lower/Upper ():返回小 / 大写
-
LTrim/Rtrim ():去掉左 / 右侧空格
-
Soundex ():将任何文本串转换为描述其语音表示的字母数字模式
- 对串进行发音比较(输入纠正,匹配输入项读音接近字串)
3、时间和日期处理(P71)
-
Date ():返回日期
-
Time ():返回时间
4、数值处理(P74)
-
Abs ():返回绝对值
-
Sin() / Cos() / Tan()
-
Exp() / Sqrt()
-
Mod()
-
Pi ():返回圆周率
-
Rand ():返回一个随机数
汇总数据
1、聚集函数 aggregate function
-
def:行组上计算和返回单个值的函数
-
AVG ():SELECT AVG (列名) FROM 表名
- 仅用于确定特定数列,且列名必须以函数参数给出
- 忽略值为 NULL 的行
-
COUNT ():SELECT COUNT (*) AS 别名 FROM 表名,统计行个数
- COUNT (*) 统计 NULL 和非空值
- COUNT(列名)统计特定值,忽略值为 NULL 的行
-
MAX ():SELECT MAX (列名) AS 别名 FROM 表名
- 可作返回任意列的最大值,按列排序的文本数据返回尾行
- 忽略值为 NULL 的行
-
MIN ():SELECT MIN (列名) AS 别名 FROM 表名
- 可作返回任意列的最小值,按列排序的文本数据返回首行
- 忽略值为 NULL 的行
-
SUM ():SELECT SUM (列名) AS 别名 FROM 表名
- Sum (列名) 返回各行该列数据之和
- 忽略值为 NULL 的行
-
指定聚集范围 ALL / DISTINCT
-
组合聚集函数:SELECT COUNT (*) AS 别名, MIN (列名) AS 别名,MAX (列名) AS 别名,……,FROM 表名
分组数据
1、创建分组:SELECT COUNT (*) AS 别名 FROM 表名 GROUP BY 列名
-
对每个组的结果分别进行聚集,所有列结果一同计算
- 可包含任意数目的列
- 每列可为检索列或有效表达式,不能为聚集函数
- SELECT 使用表达式 - GROUP BY 必须使用相同表达式,不能使用别名
-
WITH ROLLUP:得到每个分组及其汇总级别的值
- SELECT 列名,COUNT (*) AS 别名 FROM 表名 GROUP BY 列名 WITH ROLLUP
2、过滤分组:HAVING(WHERE 仅可过滤行)
-
适用所有 WHERE 句法
-
在数据分组后进行
- WHERE 在数据过滤前进行,因此分组中不包含 WHERE 排除的行
3、分组和排序
保证数据正确排序:GROUP BY + ORDER BY