文章目录
- 一.不同DBMS函数的差异
- 二.单行函数
- 三.聚合函数
- 3.1 常用聚合函数
- 3.2 GROUP BY
- 四.SELECT的执行顺序
- 4.1 写SELECT的顺序
- 4.2 SELECT 的执行顺序
一.不同DBMS函数的差异
我们在使用 SQL 语言的时候,不是直接和这门语言打交道,而是通过它使用不同的数据库软件,即DBMS。DBMS 之间的差异性很大,远大于同一个语言不同版本之间的差异。实际上,只有很少的函数是被 DBMS 同时支持的。比如,大多数 DBMS 使用(||)或者(+)来做拼接符,而在 MySQL 中的字符串拼接函数为concat()。大部分 DBMS 会有自己特定的函数,这就意味着采用 SQL 函数的代码可移植性是很差的,因此在使用函数的时候需要特别注意。
二.单行函数
单行函数主要包括数值函数、字符串函数、日期和时间函数、流程控制函数等,使用的时候可以查询,这里就不一一列举,下面是单行函数的特点:
- 操作数据对象
- 接受参数返回一个结果
- 只对一行进行变换
- 每行返回一个结果
- 可以嵌套
- 参数可以是一列或一个值
三.聚合函数
- 聚合函数作用于一组数据,并对一组数据返回一个值。
- 聚合函数不能嵌套调用。比如不能出现类似“
AVG(SUM(字段名称))
”形式的调用。
3.1 常用聚合函数
主要包括:
- AVG()
- SUM()
- MAX()
- MIN()
- COUNT()
3.2 GROUP BY
在SELECT列表中所有未包含在组函数中的列都应该包含在 GROUP BY子句中,包含在 GROUP BY 子句中的列不必包含在SELECT 列表中.
四.SELECT的执行顺序
4.1 写SELECT的顺序
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT...
4.2 SELECT 的执行顺序
在 MySQL 和 Oracle 中,SELECT 执行顺序基本相同:
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT 的字段 -> DISTINCT -> ORDER BY -> LIMIT
比如你写了一个 SQL 语句,那么它的关键字顺序和执行顺序是下面这样的:
SELECT DISTINCT player_id, player_name, count(*) as num # 顺序 5
FROM player JOIN team ON player.team_id = team.team_id # 顺序 1
WHERE height > 1.80 # 顺序 2
GROUP BY player.team_id # 顺序 3
HAVING num > 2 # 顺序 4
ORDER BY num DESC # 顺序 6
LIMIT 2 # 顺序 7
在 SELECT 语句执行这些步骤的时候,每个步骤都会产生一个 虚拟表 ,然后将这个虚拟表传入下一个步骤中作为输入。需要注意的是,这些步骤隐含在 SQL 的执行过程中,对于我们来说是不可见的。