SQL语句的执行顺序:
(特别巧的是:关键字的书写顺序就是SQL子句的执行顺序)
子 句 | 说 明 | 是否必须使用 |
---|---|---|
SELECT | 要返回的列或表达式 | 是 |
FROM | 从中检索数据的表 | 仅在从表选择数据时使用 |
WHERE | 行级过滤 | 否 |
GROUP BY | 分组说明 | 仅在按组计算聚集时使用 |
HAVING | 组级过滤 | 否 |
ORDER BY | 输出排序顺序 | 否 |
LIMIT | 要检索的行数 | 否 |
EG:
SELECT vend_id,COUNT(*) AS num_prods
FROM products
WHERE prod_price >2
GROUP BY vend_id
HAVING COUNT(*) >=2
ORDER BY num_prods DESC
LIMIT 0,3;
说明:
having子句后的COUNT(*)
可以用别名num_prods
代替,这条SQL语句的执行顺序是,首先根据where条件将所有的结果过滤出prod_price >2
的记录,将过滤出来的记录按照vend_id
将结果进行分组,将分组后的聚集结果按照条件COUNT(*) >=2
每组数量>=2
的记录过滤出来,然后按照列num_prods
的降序排列,将排列后的结果从第一条开始取,取出不超过3条的记录.
返回结果:
+---------+-----------+
| vend_id | num_prods |
+---------+-----------+
| 1003 | 7 |
| 1001 | 3 |
| 1002 | 2 |
+---------+-----------+