|MySQL使用基础,这么用就对了( 二 )


  1. 从 FROM 语句开始 , 对 student 和 class 表进行 CROSS JOIN 笛卡尔积运算 , 得到虚拟表 vt 1-1;
  2. 通过 ON 筛选 , 在 vt1-1 的基础上进行过滤然后得到表 vt 1-2;
  3. 添加外部行 。 如使用左连接 , 右连接和全连接时 , 就会涉及到外部行 , 会在 vt1-2 的基础上增加外部行 , 得到 vt1-3 。
  4. 如果超过两张表 , 就会重复上面的步骤 。
  5. 在拿到最终的 vt1 的表数据后 , 会执行 WHERE 后面的过滤阶段 , 得到表 vt2.
  6. 接着到 GROUP 阶段 , 进行分组得到 vt3.
  7. 接着到 HAVING 阶段 , 对分组的数据进行过滤 , 得到 vt4.
  8. 后面进入 SELECT 阶段 , 提取需要的字段 , 得到 vt5-1 , 接着通过 DISTINCT 阶段 , 过滤到重复的行 , 得到 vt5-2.
  9. 然后对指定的字段进行排序 , 进入 ORDER BY 阶段 , 得到 vt6.
  10. 最后在 LIMIT 阶段 , 取出指定的行 , 对应 vt7 , 也就是最后的结果 。
如果涉及到函数的计算比如 sum() 等 , 会在 GROUP BY分组后 , HAVING 分组前 , 进行聚集函数的计算 。
涉及到表达式计算 , 如 age * 10 等 , 会在 HAVING 阶段后 , SELECT 阶段前进行计算 。
通过这里 , 就可以总结出提高 SQL 效率的第一个方法:
  • 使用 SELECT 时指定明确的列来代替 SELECT * . 从而减少网络的传输量 。
使用 WHERE 进行过滤
使用 WHERE 筛选时 , 常有通过比较运算符 , 逻辑运算符 , 通配符三种方式 。
对于比较运算符 , 常用的运算符如下表 。
|MySQL使用基础,这么用就对了
本文插图

对于逻辑运算符来说 , 可以将多个比较运行符连接起来 , 进行多条件的筛选 , 常用的运算符如下:
|MySQL使用基础,这么用就对了
本文插图

需要注意的是 , 当 AND 和 OR 同时出现时 , AND 的优先级更高会先被执行 。 当如果存在 () 的话 , 则括号的优先级最高 。
使用通配符过滤:
like:(%)代表零个或多个字符 , (_)只代表一个字符
函数
和编程语言中的定义的函数一样 , SQL 同样定义了一些函数方便使用 , 比如求和 , 平均值 , 长度等 。
常见的函数主要分为如下四类 , 分类的原则是根据定义列时的数据类型:
  • 算术函数:

|MySQL使用基础,这么用就对了
本文插图

  • 字符串函数
|MySQL使用基础,这么用就对了
本文插图

需要注意的是 , 在使用字符串比较日期时 , 要使用 DATE 函数比较 。
  • 日期函数

|MySQL使用基础,这么用就对了
本文插图

  • 转换函数:
|MySQL使用基础,这么用就对了
本文插图

CAST 函数在转换数据类型时 , 不会四舍五入 , 如果原数值是小数 , 在转换到整数时会报错 。
在转换时可以使用 DECIMAL(a,b) 函数来规定小数的精度 , 比如 DECIMAL(8,2) 表示精度为 8 位 - 小数加整数最多 8 位 。 小数后面最多为 2 位 。
然后通过 SELECT CAST(123.123 AS DECIMAL(8,2)) 来转换 。
聚集函数
通常情况下 , 我们会使用聚集函数来汇总表的数据 , 输入为一组数据 , 输出为单个值 。
常用的聚集函数有 5 个:
|MySQL使用基础,这么用就对了


推荐阅读