group by和order by的区别、having和where的用法与其执行顺序

时间:2021-09-30 20:09:15

 order by 在英文里的意思就是行的排序方式,默认的为升序。order by 后面必须列出排序的字段名,

可以是多个字段名。

例:1、单一列属性排序

默认排序: 

1 select *from s roder by sno;

group by和order by的区别、having和where的用法与其执行顺序

select *from s order by sno desc

  group by和order by的区别、having和where的用法与其执行顺序

2、多个列属性排序

选择多个列属性经行排序,然后排序的顺序是,从左到右

,依次排序。如果前面列属性有些是一样的话,再按后面的列属性排序。(在前面的列属性优先级高)。

 

select *from s   order by 
 sname desc,sage desc 

    

 group by和order by的区别、having和where的用法与其执行顺序

首先按照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  

group by和order by的区别、having和where的用法与其执行顺序

查询选修了3门以上课程,且所有课程成绩都高于60分的学生学号及课程数

select sno , count(cno)  
from sc   
where grade > 60    
group by sno having count(cno) > 3  

  group by和order by的区别、having和where的用法与其执行顺序

 

 

 

四、当一个查询语句同时出现了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