SQL 的执行顺序,记录一下。
虽然看过,但是在项目中遇到一个SQL,要求给用户按投票数排序,票数相等时按照先达到票数的时间排序,一开始竟然不会写????后来从网上找了一圈
SQL UID,SUM(VOTE) AS VOTES FROM TABLE WHERE STAR=? GROUP BY UID ORDER BY VOTES DESC,MAX(CREATE_TIME) ASC;
稍微解释一下:首先按照where找到要排序的粉丝,然后GROUP BY uid将用户分组,同时SUM(VOTE)计算出每个用户的总票数,并在ORDER BY 里按DESC排序,若票数相等则再按create_time排序,之所以用MAX(create_time)也是为了找出用户最后一票的时间,然后比较用户们最后一票的时间,当然是小的是靠前的了。就完成了查询。
这里涉及了一个GROUP BY的点,GROUP BY后会为每个组只保留一条数据,所以这时可以使用聚合函数来筛选出想要的数据,这里就是使用SUM 和 MAX筛选出想要的结果。
下面的结果是从网上摘录的,做个记录吧先。
下面我们来具体分析一下查询处理的每一个阶段
FORM: 对FROM的左边的表和右边的表计算笛卡尔积。产生虚表VT1
ON: 对虚表VT1进行ON筛选,只有那些符合<join-condition>的行才会被记录在虚表VT2中。
JOIN: 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3, rug from子句中包含两个以上的表的话,那么就会对上一个join连接产生的结果VT3和下一个表重复执行步骤1~3这三个步骤,一直到处理完所有的表为 止。
WHERE: 对虚拟表VT3进行WHERE条件过滤。只有符合<where-condition>的记录才会被插入到虚拟表VT4中。
GROUP BY: 根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5.
CUBE | ROLLUP: 对表VT5进行cube或者rollup操作,产生表VT6.
HAVING: 对虚拟表VT6应用having过滤,只有符合<having-condition>的记录才会被 插入到虚拟表VT7中。
SELECT: 执行select操作,选择指定的列,插入到虚拟表VT8中。
DISTINCT: 对VT8中的记录进行去重。产生虚拟表VT9.
ORDER BY: 将虚拟表VT9中的记录按照<order_by_list>进行排序操作,产生虚拟表VT10.
LIMIT:取出指定行的记录,产生虚拟表VT11, 并将结果返回。
转载于:https://blog.51cto.com/fulin0532/2336763
SQL 的执行顺序,记录一下。相关推荐
- 25、Sql语句执行顺序
sql语句定义和执行顺序 摘自<MySQL技术内幕:SQL编程> sql语句定义的顺序 (1) SELECT (2)DISTINCT<select_list> (3) FROM ...
- 【转】SQL 语句执行顺序
From:http://www.jellythink.com/archives/924 Oracle-SQL语句执行原理和完整过程详解:https://wenku.baidu.com/view/398 ...
- SQL 语句执行顺序
From:http://www.jellythink.com/archives/924 Oracle-SQL语句执行原理和完整过程详解:https://wenku.baidu.com/view/398 ...
- mysql 执行顺序 SQL语句执行顺序分析
最近在做一个数据库的大作业,算是复习了下MySql里面比较复杂的一些语句的用法,如Left Join之类的.在这里就不对具体语法进行记录了,希望能在以后经常用到,而不是隔好长时间用一次.在这里就记录下 ...
- sql语句执行顺序及简单优化
SQL的执行顺序 (1)from (表关联,是从后往前.从右到左解析的 ) 所以尽量把数据量大的表放在最左边来进行关联 (2) on 需要从哪个数据表检索数据 (3) join 多表 ...
- 整理:sql server 中sql语句执行顺序
原文地址为: 整理:sql server 中sql语句执行顺序 SQL Server 查询处理中的各个阶段(SQL执行顺序) SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中 ...
- MySql的sql语句执行顺序
MySql的sql语句执行顺序 FROM table1 left join table2 on 将table1和table2中的数据产生笛卡尔积,生成Temp1 JOIN table2 所以先是确定表 ...
- mysql oracle 查询语句执行顺序_MySQL sql语句执行顺序
(8) DISTINCT (1) FROM (3) JOIN (2) ON (4) WHERE (5) GROUP BY (6) HAVING ...
- 带left join 的sql的执行顺序
1.笛卡尔积(Cartesian product) 顾名思义, 这个概念得名于笛卡儿. 在数学中,两个集合 X 和 Y 的笛卡儿积(Cartesian product),又称直积,表示为 X × Y, ...
- php语句执行顺序,sql语句执行顺序是什么
sql语句执行顺序:1.最先执行from tab:2.where语句是对条件加以限定:3.分组语句[group by-- having]:4.聚合函数:5.select语句:6.order by排序语 ...
最新文章
- sscanf简单用法
- 走向REST:将Tomcat与Spring和JAX-RS嵌入(Apache CXF)
- Jenkins中切换devtoolset
- Perl 安装及模组安装方法【windows】
- Flex读取非UTF-8中文数据乱码问题的解决方案
- 笔记.cloudflare 的橙色云代理ssl坑
- Android 9.0 HIDL接口添加
- openpythonxl_常用模块之openpyxl (python3入门)
- 建立项目接口文档_一个 SpringBoot 项目该包含哪些?
- 精通innodb引擎_《MySQL技术内幕:InnoDB存储引擎》PDF 下载
- win7计算机开机启动项设置,开机启动项,教您Win7开机启动项怎么设置
- 思科交换机配置dhcp
- 试读《线上幽灵:世界头号黑客米特尼克自传》
- 解决:Adobe Flash Player已不再受支持
- python requests 异步调用_python - 如何使用requests_html异步获取()URL列表? - 堆栈内存溢出...
- 永洪BI配置测试及遇到的一些问题
- TypeError: slice indices must be integers 数组索引必须是整数
- 网络通是免费的内网端口映射软件
- 微信接入指南进入开发者模式
- 自动更换壁纸的小软件:likecan