《同时出现了where,groupby,having,orderby的时候,执行顺序和编写顺序.pdf》由会员分享,可在线阅读,更多相关《同时出现了where,groupby,having,orderby的时候,执行顺序和编写顺序.pdf(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、当一个查询语句同时出现了 where,group by,having,order by的时候,执行顺序和编写顺序 2010-06-06 15:34 使用 count(列名)当某列出现 null值的时候,count(*)仍然会计算,但是 count(列名)不会。二、数据分组(group by):select 列 a,聚合函数(聚合函数规范)from 表明 where 过滤条件 group by 列 a group by 字句也和 where条件语句结合在一起使用。当结合在一起时,where在前,group by 在后。即先对 select xx from xx的记录集合用 where进行筛选,然
2、后再使用 group by 对筛选后的结果进行分组。三、使用 having字句对分组后的结果进行筛选,语法和 where差不多:having 条件表达式 需要注意 having和 where的用法区别:1.having只能用在 group by 之后,对分组后的结果进行筛选(即使用 having的前提条件是分组)。2.where肯定在 group by 之前,即也在 having之前。3.where后的条件表达式里不允许使用聚合函数,而 having可以。四、当一个查询语句同时出现了 where,group by,having,order by 的时候,执行顺序和编写顺序是:1.执行 wher
3、e xx对全表数据做筛选,返回第 1 个结果集。2.针对第 1 个结果集使用 group by分组,返回第 2 个结果集。3.针对第 2 个结果集中的每 1 组数据执行 select xx,有几组就执行几次,返回第 3 个结果集。4.针对第 3 个结集执行 having xx进行筛选,返回第 4 个结果集。5.针对第 4 个结果集排序。例子:完成一个复杂的查询语句,需求如下:按由高到低的顺序显示个人平均分在 70 分以上的学生姓名和平均分,为了尽可能地提高平均分,在计算平均分前不包括分数在 60 分以下的成绩,并且也不计算贱人(jr)的成绩。分析:1 要求显示学生姓名和平均分 因此确定第 1
4、步 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 五、索引 1.索引是单独的数据库对象,索引也需要被维护。2.索引可以提高查询速度,但会降增删改的速度。3.通过一定的查询触发,并不是越多越好。什么时候不适合用索引?1.当增删改的操作大于查询的操作时。2.查询的语句大于所有语句的三分之一时。创建索引语法:create index 索引名 on 表明(列名)删除索引语法:drop index 索引名-(注)引用 http:/