0%

数据库操作(二)—— 进阶篇

进阶操作 第 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