SQL解析顺序:
SELECT DINSTINCT
< select_list >
FROM
< left_table > < join_type >
JOIN < right_table > ON <join_condition >
WHERE
< where_comdition >
GROUP BY
< group_by_list >
HAVING
< having_condition >
ORDER BY
< order_by_condition >
LIMIT
< limit_number >
如果有GROUP BY子句,则将结果按照 group_by_list的值进行分组,该属性列值相等的元组为一组。
通常会在每组中作用聚集函数。如果GROUP BY子句中带HAVING短语,则只有满足指定条件的组才予以输出。
order by子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排序,默认是升序。
执行顺序:
FROM < left_table >
ON < join_condition >
< join_type> JOIN < right_table >
WHERE < where_condition >
GROUP BY < group_by_list >
HAVING < having_condition >
SELECT
DISTINCT < select_list >
ORDER BY < order_by_condition >
LIMIT < limit_number >
example
SELECT
a.uid,
count(b.oid) AS total
FROM
table1 AS a
LEFT JOIN table2 AS b ON a.uid = b.uid
WHERE
a. NAME = 'mike'
GROUP BY
a.uid
HAVING
count(b.oid) < 2
ORDER BY
total DESC
LIMIT 1;