首页

文章

mysql sql语句group by和having的执行顺序是怎样的

发布网友 发布时间:2022-04-20 04:42

我来回答

3个回答

懂视网 时间:2022-04-08 05:50

1.FROM  对FROM的左边的表和右边的表计算笛卡尔积。产生虚表VT1

2.ON  对虚表VT1进行ON筛选,只有那些符合<join-condition>的行才会被记录在虚表VT2中。

3.JOIN  如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3, rug from子句中包含两个以上的表的话,那么就会对上一个join连接产生的结果VT3和下一个表重复执行步骤1~3这三个步骤,一直到处理完所有的表为止。

4.WHERE  对虚拟表VT3进行WHERE条件过滤。只有符合<where-condition>的记录才会被插入到虚拟表VT4中。

5.GROUP BY  根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5.

6.WITH CUBE or WITH ROLLUP  对表VT5进行cube或者rollup操作,产生表VT6.

7.HAVING  对虚拟表VT6应用having过滤,只有符合<having-condition>的记录才会被 插入到虚拟表VT7中。

8.SELECT  执行select操作,选择指定的列,插入到虚拟表VT8中。

9.DISTINCT  对VT8中的记录进行去重。产生虚拟表VT9.

10.ORDER BY  将虚拟表VT9中的记录按照<order_by_list>进行排序操作,产生虚拟表VT10.

11.TOP  取出指定行的记录,产生虚拟表VT11, 并将结果返回。

【转】MySQL的语句执行顺序

标签:

热心网友 时间:2022-04-08 02:58

(1)一般而言在group by语句中,的结果显示只能是分组字段,如果有其他字段那么必须是带有聚合函数的,比如count,sum,max,min等,但是这里直接放个*就可以执行了?
(2)如果是在group by之前筛选,那么怎么count,是选择oid=5的进行count么?如果不进行分组,数据库怎么能够知道按照什么规则进行count.
个人建议,这样
select cuid,count(oid) from orders
group by cuid
having count(oid)=5

select cuid,count(oid) from orders
group by cuid
对比一下,我忘了mysql有没有minus
如果有的话,
select cuid,count(oid) from orders group by cuid
minus
select cuid,count(oid) from orders group by cuid having count(oid)=5
就应该能看出来了。追问上面的语句在mysql中确实可以运行的出来,无论是去掉having子句还是没有去掉的,所以我才有疑问,想知道mysql是怎么运行出来的

追答我也奇怪,那么运行结果是所有字段都有么?那还真是奇怪

热心网友 时间:2022-04-08 04:16

在日常查询中,索引或其他数据查找的方法可能不是查询执行中最高昂的部分,例如:MySQL GROUP BY 可能负责查询执行时间 90% 还多。MySQL 执行 GROUP BY 时的主要复杂性是计算 GROUP BY 语句中的聚合函数。UDF 聚合函数是一个接一个地获得构成单个组的所有值。这样,它可以在移动到另一个组之前计算单个组的聚合函数值。当然,问题在于,在大多数情况下,源数据值不会被分组。来自各种组的值在处理期间彼此跟随。因此,我们需要一个特殊的步骤。


处理 MySQL GROUP BY让我们看看之前看过的同一张table:    mysql> show create table tbl G    *************************** 1. row ***************************          Table: tbl    Create Table: CREATE TABLE `tbl` (     `id` int(11) NOT NULL AUTO_INCREMENT,     `k` int(11) NOT NULL DEFAULT '0',     `g` int(10) unsigned NOT NULL,     PRIMARY KEY (`id`),     KEY `k` (`k`)    ) ENGINE=InnoDB AUTO_INCREMENT=2340933 DEFAULT CHARSET=latin1    1 row in set (0.00 sec)

并且以不同方式执行相同的 GROUP BY 语句:

1、MySQL中 的 Index Ordered GROUP BY

八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 高分!换显卡nvidia控制面板被我卸了,重新安装显卡驱动后没了nvidia控... 我的nvidia控制面板被卸载了 怎么找回啊 卸载后 这个画面看着很奇怪_百 ... 李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 mysql:SQL语句的执行顺序详解 MySQL教程-25-总结DQL语句的执行顺序 MySQL的执行流程怎么优化? 问下微信朋友圈消息点开,已删除或隐藏的显示此朋友圈已不可见,但是点开之后什么都不显示的是什么意思? vivo售后能换原装电池吗 在苹果售后换电池得多久 苹果手机售后一年已内没有买保险可以换电池嘛? oppo手机电池不耐用可以去售后免费换不 iPhone 官方售后换电池的价格是多少? iphone售后能换电池吗 普通的手机维修店可以换苹果电池吗 苹果手机换电池可以自己购买拿到售后去换吗? 笔记本可以去售后换电池吗 去苹果售后更换电池需要带什么 用了一年了,手机电池不耐了,售后能不能换电池 电动车电瓶在保质期内在任何一家维修店都可以换新... 苹果售后换电池要多久? ipad售后能换电池么 我看不到对方微信动态,是把我删除了吗? OppO手机想同时下载两个一样的软件下载什么软件 谁能详细解释一下这个mysql查询语句查询的内容是什... 各位,问一下mysql 中 where 的条件有执行顺序么 MySQL的程序如何运行? mysql中 select id into _ id from table1 where n... 请问,mysql的执行计划的执行列代表什么意思 mysql 高并发写数据 sql 在底层是顺序执行吗 如何执行mysql语句块 怎么去看懂mysql的执行计划 mysql怎么执行sql语句 mysql的触发器中,难道代码不是按顺序执行的吗?难... MYSQL数据库如何执行SQL语句 mysql sql 语句 mysql数据库怎么执行sql语句 如何提高MySQL的执行效率 MySQL中如何执行SQL语句? mysql怎么一次执行多条SQL语句 邮政储蓄银行补办卡需要准备什么啊 建设银行 储蓄卡丢了 可以补办新卡吗? 储蓄卡丢了能补办原来的卡 储蓄卡怎么补办?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com