SQL之数据分析必问查询顺序
已经开始数据分析工作的同学,大都知道从数据库中取数、查数是常见的工作内容,而理解查询的顺序之后,能够帮助我们更好排查出现的错误,还能优化SQL的执行速度。对于要面试数据分析的同学,能够回答出查询顺序的问题,是能够大大加分的,且有时还是必问的。
先看个小问题
大家先在自己的电脑上运行下类似这句代码
select country , sum(area) from country_data where sum(area) > 1000 group by country
运行成功了吗?先想下30秒,然后接着看哟(提示:SQL执行顺序)
SQL执行顺序
我们通过看一个完整的查询来看下执行顺序。
--Complete SELECT query SELECT DISTINCT column, AGG_FUNC(column_or_expression), … FROM mytable JOIN another_table ON mytable.column = another_table.column WHERE constraint_expression GROUP BY column HAVING constraint_expression ORDER BY column ASC/DESC LIMIT count OFFSET COUNT;
1.From and JOIN
首先我们进行查询的时候,肯定是先获得一份数据集的,From语句和JOIN被先执行的,就是为了获得数据集的。
2.WHERE
一旦数据集给拿到了,WHERE限制条件会被用到某些行上,并把不满足的行给抛弃掉。并且,这能够用到各种数据类型中,包括numbers、strings,or dates
where nmbr > 5; where strng = 'Skywalker'; where dte = '2017-01-01';
3.GROUP BY
WHERE条件限定之后,接下来就是GROUP BY语句了,这一语句会根据某一字段进行分组,并对各个组进行求聚合。现在我们再来想想刚刚提到的代码错在哪里了呢
select country , sum(area) from country_data where sum(area) > 1000 group by country
想想看,我们先进行的是FROM,紧接着是WHERE,然后才是GROUP BY。所以上面的语句就是错在了WHERE 语句在执行的时候,GROUP BY语句还没有开始,那时聚合值**sum(area)**还是未知的。那正确的写法呢?还请接着往下看。
4.HAVING
having语句在SQL中的主要作用与Where语句作用是相同的,但是having是过滤聚合值,其实上面的正确写法是这样的
select country , sum(area) from country_data group by country having sum(area) > 100000
5.SELECT
在经过上面的执行之后,终于到了select语句,但是别慌,下面还有呢。
6.DISTINCT
对于剩下的行,Distinct用来去除重复行,只保留唯一的。
7.ORDER BY
此语句用来对select后的结果,进行排序,升序或者是降序。
8.LIMIT/OFFSET
用来限定返回的行数
总结
执行顺序 | 语句 | 功能 |
---|---|---|
1 | from | 获取基础数据 |
2 | where | 过滤基础数据 |
3 | group by | 聚合基础数据 |
4 | having | 过滤聚合后的数据 |
5 | select | 返回最终的数据 |
6 | distinct | 去重最终的数据 |
7 | order by | 排序最终的数据 |
8 | limit/offset | 限定最终数据的返回行 |
参考链接
1.SQL Query Order of Execution
2.SQL Lesson 12: Order of execution of a Query
- oracle数据库执行计划统计分析,优化表数据字典,提高sql查询效率
- SQL简介&数据表分析&数据查询
- oracle sql语句执行顺序、查询效率分析、步骤解析
- [SQL Server玩转Python] 二.T-SQL查询表格值及Python实现数据分析
- sql查询按in顺序排序显示数据 oracle
- 基于数据字典的通用查询系统(一)SQL语句的构成分析
- Informix数据表结构分析资料整理之字段类型说明和查询SQL语句
- Informix数据表结构分析资料整理之字段类型说明和查询SQL语句
- Oracle Class2. SQL查询和SQL函数(Oracle数据类型,ddl,dml,dcl,事务控制语言tcl,sql操作符,sql函数,select语句,运算符,分析函数,临时表)
- Informix数据表结构分析资料整理之字段类型说明和查询SQL语句
- Informix数据表结构分析资料整理之字段类型说明和查询SQL语句
- ORACLE sql 根据in查询里面数据的顺序进行排序
- SQL查询在id顺序不规则第n行到第n+m行数据
- mysql高级----查询截取分析(二):批量插入数据脚本、用show profile分析sql、全局查询日志
- 基于数据字典的通用查询系统(一)SQL语句的构成分析
- Informix数据表结构分析资料整理之字段类型说明和查询SQL语句
- sql语句查询某一天数据
- MyBatis原理分析之四:一次SQL查询的源码分析
- SQL Server 查询处理中的各个阶段(SQL执行顺序)
- SQL中查询指定数据的 上一条或下一条数据