SQL查询中关键词的执行顺序
写在前面:最近的工作主要是写SQL脚本,在编写过程中对SQL的执行和解析过程特别混乱不清,造成了想优化却无从下手。为此专门在网上找博文学习,并做了如下总结。
1、查询中常用到的关键词有:
SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY
其中,SELECT与FROM是必需的,其他关键词则是可选的。
2、这些关键词的书写顺序:
SELECT 字段列表
FROM 表名
WHERE 记录筛选条件
GROUP BY 分组字段列表
HAVING 分组筛选条件
ORDER BY 排序字段列表
3、WHERE与HAVING的区别:
WHERE是对记录进行筛选;而HAVING是对按GROUP BY进行分组后的组进行筛选。
HAVING只有在使用GROUP BY 后才能使用。
4、GROUP BY的两个作用:
第一个作用是,将从表中取出的记录按照一个或者多个字段进行分组;
第二个作用是,去重,其本质仍然是分组。
5、这些关键词的解析/执行顺序:
FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY
具体的说:
FROM:组装来自不同数据源的记录
WHERE:根据指定的条件过滤上一步检索出的记录
GROUP BY:对上面过滤后的记录按指定条件分组
SUM/AVG/COUNT:使用聚合函数进行计算
HAVING:对所有分组根据指定条件进行过滤
SELECT:从上一步过滤后的各个分组记录中提取指定查询的字段列表(包括聚合字段、计算字段、表达式字段等)
ORDER BY:对上一步查询得到的结果集按照排序字段列表进行排序,并输出排序结果
6、GROUP BY 字段1,字段2——先对所有记录按照字段1进行分组,然后对分组后的结果再在没组内按照字段2分组。
7、ORDER BY 字段1,字段2——先按照字段1进行排序,再按照字段2进行排序。
8、排序规则关键字:ASC(升序,默认)、DESC(降序)。
9、COUNT关键字,作计数使用。COUNT(*)是做候选数据集的整体计数,COUNT(字段)是对某字段进行计数。如果某列出现NULL值时,COUNT(*)会算入该列,COUNT(字段)则不会算入该列。
举例:
在学生成绩表中,把班级为1班的学生成绩按照学生姓名分组,并且筛选分组结果,汇总计算各个学生的总成绩,选出总成绩大于600分的学生列表,并按照总分从高到低排列。
SQL语句如下:
select std_name, sum(score) as sum_score
from grade_table
where class_id=1
group by std_name
having sum(score)>600
order by 2 asc
在上面的示例中SQL语句的执行顺序如下:
①首先执行FROM子句,从grade_table表检索记录;
②执行WHERE子句,筛选出grade_table表中class_id=1的所有记录;
③执行GROUP BY子句,把grade_table表按std_name列进行分组;
④计算SUM()聚集函数,求出每个std_name的score之和;
⑤执行HAVING子句,筛选出sum(score)大于600的分组;
⑥提取std_name,sum(score)两个字段,产生新的结果集;
⑦执行ORDER BY子句,把⑥的结果集按sum(score)字段升序排列。
参考资料:
[1]查询语句中select from where group by having order by的执行顺序
[3]sql关键词执行先后顺序
感谢!
文中如有错误和描述不当,欢迎指正!
SQL查询中关键词的执行顺序的更多相关文章
- SQL查询中关键字的执行顺序
SQL语句中的每个关键字都按照顺序往下执行,而每一步操作会生成一个临时表,最后的临时表就是最终结果: FROM <left_table>:from子句返回初始结果集 <join_ty ...
- MySQL数据库之单表查询中关键字的执行顺序
目录 MySQL数据库之单表查询中关键字的执行顺序 1 语法顺序 2 执行顺序 3 关键字使用语法 MySQL数据库之单表查询中关键字的执行顺序 1 语法顺序 select distinct from ...
- sql查询原理和Select执行顺序
一 sql语句的执行步骤 1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义. 2) 语义分析,检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限. 3)视图转换,将涉及视图的 ...
- {MySQL的逻辑查询语句的执行顺序}一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析
MySQL的逻辑查询语句的执行顺序 阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SEL ...
- 关于sql和MySQL的语句执行顺序(必看!!!)
今天遇到一个问题就是mysql中insert into 和update以及delete语句中能使用as别名吗?目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及My ...
- 关于sql和MySQL的语句执行顺序
sql和mysql执行顺序,发现内部机制是一样的.最大区别是在别名的引用上. 一.sql执行顺序 (1) from (3) join (2) on (4) where (5) group by(开始使 ...
- SQL Select语句完整的执行顺序(转)
SQL Select语句完整的执行顺序: 1.from子句组装来自不同数据源的数据: 2.where子句基于指定的条件对记录行进行筛选: 3.group by子句将数据划分为多个分组: 4.使用聚集函 ...
- 170607、SQL Select语句完整的执行顺序
SQL Select语句完整的执行顺序: 1.from子句组装来自不同数据源的数据: 2.where子句基于指定的条件对记录行进行筛选: 3.group by子句将数据划分为多个分组: 4.使用聚集函 ...
- (转)关于sql和MySQL的语句执行顺序(必看!!!)
原文:https://blog.csdn.net/u014044812/article/details/51004754 https://blog.csdn.net/j080624/article/d ...
随机推荐
- 【BZOJ】3779 重组病毒
[算法]Link-Cut Tree+线段树(维护DFS序) [题解]整整三天……T_T 这篇题解比较资瓷:permui 这道题虽然树形态没有变化,但用lct写的原因在于把题目中的操作一进行了神转化:每 ...
- 【游记】CTSC&APIO2017
GDOI回来不到两天就前往北京参加CTSC和APIO. CTSC Day1 [考试] T1一道神奇的题,很快想到O(n2)做法,感觉ctsc题目难度应该很大,就没马上想着出正解(事实上这届CTSC偏水 ...
- Bazinga(HDU5510+KMP)
t题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5510 题目: 题意:找到一个编号最大的字符串满足:存在一个编号比它小的字符串不是它的字串. 思路:K ...
- Computer(HDU2196+树形dp+树的直径)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2196 题目: 题意:有n台电脑,每台电脑连接其他电脑,第i行(包括第一行的n)连接u,长度为w,问你每 ...
- 简易微信小程序签到功能
一.效果图 点击签到后 二.数据库 用一张数据表存用户签到的信息,每次用户签到都会往表中添加一条记录了用户id和签到日期的数据,如下图 三.后端 后端写两个接口,一个用于查询用户今日是否签到和签到记录 ...
- ORA-02291:parent key not found
Hibernate operation: Could not execute JDBC batch update; SQL [insert into dchnpricecarchancesource ...
- beego 相关
bee api bapi bee run -downdoc=true -docgen=true
- mssql手工注入1
强制字符转成数字, 所以报错, 能获得数据 查版本号: http: -- 查数据库版本: http: -- 查当前数据库用户(如果看到dbo 那么多半当前数据库的用户是dba权限): http: -- ...
- 【Python学习笔记】Coursera课程《Using Python to Access Web Data》 密歇根大学 Charles Severance——Week6 JSON and the REST Architecture课堂笔记
Coursera课程<Using Python to Access Web Data> 密歇根大学 Week6 JSON and the REST Architecture 13.5 Ja ...
- Ubuntu 14.04 ThinkPad E431无线网卡驱动安装
Ubuntu 14.04下安装无线网卡驱动. sudo apt-get install linux-headers-generic build-essential dkms sudo apt-get ...