查询语句中select from where group by having order by的执行顺序

查询语句中select from where group by having order by的执行顺序
 
1.查询中用到的关键词主要包含六个,而且他们的顺序依次为 
select--from--where--group by--having--order by 
 
其中select和from是必须的,其余关键词是可选的,这六个关键词的执行顺序 
与sql语句的书写顺序并非同样的,而是按照下面的顺序来执行 
from--where--group by--having--select--order by, 
from:须要从哪一个数据表检索数据 
 
where:过滤表中数据的条件 
group by:如何将上面过滤出的数据分组 
having:对上面已经分组的数据进行过滤的条件 
 
select:查看结果集中的哪一个列,或列的计算结果 
order by :按照什么样的顺序来查看返回的数据 
 
2.from后面的表关联,是自右向左解析的 
而where条件的解析顺序是自下而上的。 
 
也就是说,在写SQL文的时候,尽可能把数据量小的表放在最右边来进行关联(用小表去匹配大表), 
而把能筛选出小量数据的条件放在where语句的最左边 (用小表去匹配大表)
 

当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序 sql

 使用count(列名)当某列出现null值的时候,count(*)仍然会计算,可是count(列名)不会。 数据库

2、数据分组(group by ): 函数

select 列a,聚合函数(聚合函数规范) from 代表 where 过滤条件 group by 列a 对象

group by 字句也和where条件语句结合在一块儿使用。当结合在一块儿时,where在前,group by 在后。即先对select xx from xx的记录集合用where进行筛选,而后再使用group by 对筛选后的结果进行分组。 blog

3、使用having字句对分组后的结果进行筛选,语法和where差很少:having 条件表达式 排序

须要注意having和where的用法区别: 索引

1.having只能用在group by以后,对分组后的结果进行筛选(即便用having的前提条件是分组)。 select

2.where确定在group by 以前,即也在having以前。 sql语句

3.where后的条件表达式里不容许使用聚合函数,而having能够。 语法

4、当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序是: 

1.执行where xx对全表数据作筛选,返回第1个结果集。 

2.针对第1个结果集使用group by分组,返回第2个结果集。 

4.针对第2个结集执行having xx进行筛选,返回第3个结果集。

3.针对第3个结果集中的每1组数据执行select xx,有几组就执行几回,返回第4个结果集。 

 5.针对第4个结果集排序。 

例子: 

完成一个复杂的查询语句,需求以下: 

按由高到低的顺序显示我的平均分在70分以上的学生姓名和平均分,为了尽量地提升平均分,在计算平均分前不包括分数在60分如下的成绩,而且也不计算贱人(jr)的成绩。 分析: 

1.要求显示学生姓名和平均分 

所以肯定第1步select s_name,avg(score) from student 

2.计算平均分前不包括分数在60分如下的成绩,而且也不计算贱人(jr)的成绩 

所以肯定第2步 where score>=60 and s_name!=’jr’ 3.显示我的平均分 

相同名字的学生(同一个学生)考了多门科目 所以按姓名分组 肯定第3步 group by s_name 4.显示我的平均分在70分以上 

所以肯定第4步 having avg(s_score)>=70 5.按由高到低的顺序 

所以肯定第5步 order by avg(s_score) desc 

5、索引  

1.索引是单独的数据库对象,索引也须要被维护。 2.索引能够提升查询速度,但会降增删改的速度。 3.经过必定的查询触发,并非越多越好。 何时不适合用索引? 

1.当增删改的操做大于查询的操做时。 2.查询的语句大于全部语句的三分之一时。 

建立索引语法:create index 索引名 on 代表 (列名) 删除索引语法:drop index 索引名

相关文章
相关标签/搜索