前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >SQL 语句的执行顺序

SQL 语句的执行顺序

作者头像
CoderJed
发布于 2018-12-28 08:04:46
发布于 2018-12-28 08:04:46
3.6K00
代码可运行
举报
文章被收录于专栏:Jed的技术阶梯Jed的技术阶梯
运行总次数:0
代码可运行

如下表(table1):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
id  client
1   001
1   002
1   003
2   001
2   002
3   001
1   001

id 代表客服人员的 id,client 代表与该客服人员通话的客户的 id,也是说,每有一条记录,就代表一个客服与一位客户进行了通话,相同的记录,例如第一行和第七行,代表着 1 号客服与 001 号客户在不同的时间进行了两次通话,问:如下 SQL 可否统计出与客户通话次数大于 1 客服 id?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT id, COUNT(client) AS count
FROM table1
GROUP BY id
WHERE count > 1;

答案是不能,执行该 SQL 会报错:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE count > 1' at line 4

原因: WHERE 子句会比 SELECT 子句先执行,上面的 SQL 中 ,当 WHERE 子句被执行时,count 这个值尚不存在。直到 WHERE 子句执行完毕,count 才会被计算出来。

SQL 语句的书写顺序如下:

SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY

SQL 语句的执行顺序如下:

FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY

其中 SELECT 和 FROM 是必须的,其他关键词是可选的,这六个关键词的执行顺序 与SQL语句的书写顺序并不是一样的,而是按照下面的顺序来执行

  • FROM:需要从哪个数据表检索数据
  • WHERE:过滤表中数据
  • GROUP BY:将上面过滤出的数据分组
  • HAVING:对上面已经分组的数据进行过滤
  • SELECT:查看结果集中的哪个列,或列的计算结果
  • ORDER BY:按照什么样的顺序来查看返回的数据

所以本文开头所说的查询有两种实现的 SQL:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 使用 HAVING 过滤分组中的数据
SELECT id, COUNT(client) AS count
FROM table1
GROUP BY id
HAVING count > 1;

# 使用内嵌视图(子查询),让 WHERE 可以引用别名
SELECT * FROM 
    (SELECT id, COUNT(client) AS count
    FROM byte_dance_table_1
    GROUP BY id) tmp
WHERE tmp.count > 1;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.12.25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL查询语句执行顺序详解
但是,MySQL实际执行查询的顺序与书写顺序不同。MySQL优化器会根据内部算法和数据统计信息来决定最佳的执行顺序。以下是MySQL查询语句各个子句的实际执行顺序:
九转成圣
2024/05/24
1890
SQL逻辑查询语句执行顺序
一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <having_condition> ORDER BY <order_by_condition> LIMIT <limit_number> 二 SELECT语句关键
用户1214487
2018/01/24
4.1K0
不要被长SQL吓到,深刻理解SQL执行顺序
软件测试工程师,基础技能之一就是数据库,不管是基础的功能测试还是自动化测试、性能测试,都需要应用到数据库知识,并且要对数据库的学习不断深入,多学习一些高级的用法和原理。
吾非同
2020/10/23
8870
SQL查询之执行顺序解析
分享这篇文章是因为在SQL JOIN,你想知道的应该都有这篇文章中有个小伙伴问我,ON和WEHRE执行的顺序是怎样的,并且SQL执行顺序在面试中也经常被问,所以把姜承尧大佬《MySQL技术内幕 SQL编程》中关于SQL执行顺序的部分简单概述了一下,并配上例子,有想深入了解的可以去看书
Java识堂
2019/08/13
1.4K0
sql语句的执行顺序以及流程(详细掌握)
1、from 子句组装来自不同数据源的数据; 2、where 子句基于指定的条件对记录行进行筛选; 3、group by 子句将数据划分为多个分组; 4、使用聚集函数进行计算; 5、使用 having 子句筛选分组; 6、计算所有的表达式; 7、select 的字段; 8、使用 order by 对结果集进行排序。
IT小马哥
2020/03/18
25.9K0
SQL 的执行顺序
了解 SQL 的执行顺序非常有价值,它可以让我们写出语法正确的 SQL,帮助我们简化编写新查询的过程。
白日梦想家
2020/07/18
2.3K0
SQL语句各个部分执行顺序
http://www.tuicool.com/articles/fERNv2 下面先给出上面的SQL语句的执行顺序,然后进行讲解: (8)  select (9)  distinct (11)  top 1 (6)  Table1.id,COUNT(Table1.name) as nameCount (1)  from Table1 (3)  inner join Table2 (2)  on Table1.id=Table2.id (4)  where Table1.id<4 (5)  group
Albert陈凯
2018/04/04
1.8K0
Mysql-SQL执行顺序
Get
2024/03/10
3080
关于sql和MySQL的语句执行顺序(必看!!!)
一、sql执行顺序 (1)from (3) join (2) on (4) where (5)group by(开始使用select中的别名,后面的语句中都可以使用) (6) avg,sum.... (7)having (8) select (9) distinct (10) order by
Java编程指南
2020/04/08
3K0
步步深入:MySQL架构总览-&gt;查询执行流程-&gt;SQL解析顺序
转载自 https://www.cnblogs.com/annsshadow/p/5037667.html
allsmallpig
2021/02/25
6420
浅谈并对比不同数据库sql执行顺序
先执行from关键字后面的语句,明确数据的来源,它是从哪张表取来的。 再进行on的过滤。 之后join, 这样就避免了两个大表产生全部数据的笛卡尔积的庞大数据。 接着执行where关键字后面的语句,对数据进行筛选。 再接着执行group by后面的语句,对数据进行分组分类。 然后执行select后面的语句,也就是对处理好的数据,具体要取哪一部分。 最后执行order by后面的语句,对最终的结果进行排序。 最后limit限制数据条数。
chimchim
2022/11/13
1.1K0
SQL语句执行顺序是什么样的呢
Select 6 … 分组函数(avg、sum等) 4 … From 1 … where 2 … group by 3 … having 5 … order by 7 limit 8
共饮一杯无
2022/11/24
6790
关于sql和MySQL的语句执行顺序(必看)「建议收藏」
今天遇到一个问题就是mysql中insert into 和update以及delete语句中能使用as别名吗?目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及MySQL语句执行顺序:
全栈程序员站长
2022/06/24
1.6K0
浅谈SQL语句的执行过程
写在前面的话:有时不理解SQL语句各个部分执行顺序,导致理解上出现偏差,或者是书写SQL语句时随心所欲,所以有必要了解一下sql语句的执行顺序。可以有时间自己写一个简单的数据库,理解会更加深入。下面就写写我的一些理解,以SQL SERVER2008为例,进行说明。
哲洛不闹
2018/09/19
1.4K0
浅谈SQL语句的执行过程
Mysql资料 查询SQL执行顺序
1.FROM 执行笛卡尔积 FROM 才是 SQL 语句执行的第一步,并非 SELECT 。对FROM子句中的前两个表执行笛卡尔积(交叉联接),生成虚拟表VT1,获取不同数据源的数据集。
陈不成i
2021/06/09
3.3K0
【重学 MySQL】四十、SQL 语句执行过程
SELECT 语句是 SQL(Structured Query Language)中用于从数据库表中检索数据的核心语句。一个完整的 SELECT 语句结构可以包括多个部分,但并非所有部分都是必须的,具体取决于你想从数据库中检索什么信息。以下是一个相对完整的 SELECT 语句结构示例:
用户11332765
2024/10/28
1610
【重学 MySQL】四十、SQL 语句执行过程
SQL 查询语句先执行 SELECT?兄弟你认真的么?
好像这个问题应该很好回答,毕竟自己已经写了无数个 SQL 查询了,有一些还很复杂的。还装不了这个逼了?!
陈哈哈
2020/07/03
1.4K0
Hive SQL语句的正确执行顺序
关于 sql 语句的执行顺序网上有很多资料,但是大多都没进行验证,并且很多都有点小错误,尤其是对于 select 和 group by 执行的先后顺序,有说 select 先执行,有说 group by 先执行,到底它俩谁先执行呢?
五分钟学大数据
2021/07/29
7.6K0
group by和order by having where 执行顺序[order by升序]
查询语句中select from where group by having order by的执行顺序
Java架构师必看
2022/03/30
9410
group by和order by having where 执行顺序[order by升序]
深入理解MySQL执行过程及执行顺序
MySQL在我们的开发中基本每天都要面对的,作为开发中的数据的来源,MySQL承担者存储数据和读写数据的职责。因为学习和了解MySQL是至关重要的,那么当我们在客户端发起一个SQL到出现详细的查询数据,这其中究竟经历了什么样的过程?MySQL服务端是如何处理请求的,又是如何执行SQL语句的?本篇博客将来探讨这些问题。
架构师修行之路
2022/05/23
2.2K0
深入理解MySQL执行过程及执行顺序
相关推荐
MySQL查询语句执行顺序详解
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文