join where 执行顺序,where group by having执行顺序
另一方面,SQL查询1 .查询中主要使用六个关键字,其顺序如下:
selectfromwheregroupbyhavingorderby
其中,select和from是必需的,其他关键字是可选的。 这六个关键字的执行顺序与sql语句的写入顺序不同,而是按以下顺序执行:
fromwheregroupbyhavingselectorderby
from :需要从哪个数据表获取数据
where :筛选表中数据的条件
group by :如何将上面过滤的数据分组
having :筛选上述分组数据的条件
select :显示结果集中哪个列或列的计算结果
order by :以什么顺序显示返回的数据
2.from后面的表格关联,从右向左分析的where条件的分析顺序是自下而上的。
也就是说,写SQL语句时,尽可能将数据量少的表配置在最右边进行关联(小的表与大的表一致),将能够筛选小数据的条件配置在where语句的最左边(小的表与大的表一致)。
使用count (列名)时,即使列具有空值,也计算count ) *,但不计算count ) (列名)。
二、数据分组(group by )、选择列a、聚合函数(聚合函数规范) from表名where过滤条件group by列a
group by子句与where条件语句结合使用。 合并后,where在前面,group by在后面。 也就是说,使用where过滤select xx from xx的记录集合,然后使用group by对过滤的结果进行分组。
三.使用having词法筛选分组结果。 语法和where一样。 having条件式需要注意having和where的使用方法的不同。
1.having只能在group by之后用于筛选分组结果。 也就是说,使用having的前提条件是分组。
2.where一定在group by之前,也就是having之前。
3 .在3.where后的表达式中不能使用聚合函数,但可以进行having。
四.如果where、group by、having和order by同时出现在一个查询语句中,则执行顺序和创建顺序为:运行where xx过滤所有表数据并返回第一个结果集。
2 .对第一个结果集使用group by组,并返回第二个结果集。
3 .对第二个绑定运行having xx进行过滤,并返回第三个结果集。
4 .对第三个结果集的每一组数据运行select xx,执行若干组(如果有),然后返回到第四个结果集。
5 .对第四个结果集进行排序。
示例:
要完成复杂的查询语句,需要:
按照从高到低的顺序显示个人平均分在70分以上的学生的名字和平均分,为了尽量提高平均分,计算平均分前不包括分数在60分以下的成绩,也不计算卑贱(jr )的成绩。 分析:
1 .要求显示学生姓名和平均分
因此,确定步骤select s_name,AVG(score ) from student
2 .计算平均分前不包括分数在60分以下的成绩,也不计算卑鄙的人(jr )的成绩
因此,确定步骤where score=60 and s_name!=’Jr’
3 .显示个人平均分
同名学生(同一学生)考了多个科目,按名称分组确定步骤group by s_name 4。 表示个人的平均分在70分以上
因此,确认步骤4havingavg(s_score )=70 )5.是从高到低顺序
因此,确定步骤5顺序avg (s _ score ) desc
五.索引1 .索引是单独的数据库对象,索引也需要维护。
2 .索引可以加快查询速度,但会降低添加/删除速度。
3 .用一定的查询触发并不是越多越好。 什么时候使用索引?
1 )删除更改操作大于查询操作。
2 ) .如果查询语句大于所有语句的三分之一。
创建索引语法: create index索引名on表名(列名) ) ) ) ) ) ) ) ) )。
删除索引语法: drop index索引名称
更多信息请关注公众号:「软件含糊的白猫」关注永不迷失、软件模糊的白猫和他的IT朋友,分享他们的技术见解和生活故事。