1. 查询语法
查询命令由若干子句(clause)构成,包括 SELECT 子句、INTO 子句,FROM 子句, WHERE 子句,GROUP BY 子句、HAVING 子句,ORDER BY 子句和 COMPUTE 子句等。
各子句一般按以下次序执行:
- 对 FROM 中的表做笛卡儿乘积;
- 利用 WHERE 条件过滤上一步的结果;
- 根据 GROUP BY 对结果分组,如果有 HAVING 子句,则用 HAVING 后的条件 对分组的数据进一步过滤;
- 根据 ORDER BY 对结果排序;
- 按 SELECT 子句显示所要求的列。
说明: 由于排序在 SELECT 子句前执行,因此,FROM 表中所有的列都可以出现在 ORDER BY 子句中,哪怕有些列没有出现在 SELECT 子句中也没有关系。
执行顺序:
- from
- join
- on
- where
- group by(开始使用select中的别名,后面的语句中都可以使用)
- avg,sum…
- having
- select
- distinct
- order by
- limit
2. having和where的异同:
相同:
- 都是对数据过滤,只保留有效的数据;
- where和having一样, 都不允许出现字段的别名;
- 只允许出现最原始的字段的名字。
不同:
- where是对原始的记录过滤having是对分组之后的记录过滤;
- where必须的写在having的前面,顺序不可颠倒否则运行出错。
参考: