order by 在英文里的意思就是行的排序方式,默认的为升序。order by 后面必须列出排序的字段名,
可以是多个字段名。
例:1、单一列属性排序
默认排序:
1 select *from s roder by sno;
select *from s order by sno desc
2、多个列属性排序
选择多个列属性经行排序,然后排序的顺序是,从左到右
,依次排序。如果前面列属性有些是一样的话,再按后面的列属性排序。(在前面的列属性优先级高)。
select *from s order by sname desc,sage desc
首先按照sname降序排序,然后出现了XX一样的,在按照sage降序排序。
group by 从英文里理解就是分组。SELECT子句的列名列表中只能出现分组属性(比如:sno)或者有‘聚合函数’来配合才能使用。使用时至少需要一个分组
标志字段。
什么是聚合函数?
像sum()、count()、avg()等都是“聚合函数”
使用group by 的目的就是要将数据分类汇总。
HAVING短语与WHERE子句的区别
1》WHERE子句作用于基表或视图,从中选择满足条件的元组。
2》HAVING短语作用于组,从中选择满足条件的组。
3》having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。
4》.where肯定在group by 之前,即也在having之前。
5》.where后的条件表达式里不允许使用聚合函数,而having可以。
举例:查询选修了三门以上课程的学生学号:
1 select sno from sc group by sno having count(cno)>3
查询选修了3门以上课程,且所有课程成绩都高于60分的学生学号及课程数
select sno , count(cno) from sc where grade > 60 group by sno having count(cno) > 3
四、当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序是:
1.执行where xx对全表数据做筛选,返回第1个结果集。 2.针对第1个结果集使用group by分组,返回第2个结果集。
3.针对第2个结果集中的每1组数据执行select xx,有几组就执行几次,返回第3个结果集。
4.针对第3个结集执行having xx进行筛选,返回第4个结果集。 5.针对第4个结果集排序。
———————————————————————————————————————————————-
Group By 和 Having, Where ,Order by这些关键字是按照如下顺序进行执行的:Where, Group By, Having, Order by。
———————————————————————————–
粗浅的理解的话,
SELECT的语法顺序就是起执行顺序
FROM
WHERE (先过滤单表/视图/结果集,再JOIN)
GROUP BY
HAVING (WHERE过滤的是行,HAVING过滤的是组,所以在GROUP之后)
ORDER BY