T-SQL:SQL语句处理顺序的坑(四)
首先看下面一条比较完成语句,都是比较常见的关键字。
USE Temp; SELECT empid, YEAR(orderdate) AS orderyear, COUNT(*) AS numorders FROM Sales.Orders GROUP BY empid, YEAR(orderdate) ORDER BY empid, orderyear;
我们来详细分析一下sql语句的逻辑处理顺序,虽然select在每条语句的第一位,但实际上它是被最后才处理的
1.from
2.where
3.group by
4.having
5.select
6.order by
7.TOP
在仔细分析每个执行顺序代表的意思 (它的实际顺序)
FROM Sales.Orders WHERE custid = 71 GROUP BY empid, YEAR(orderdate) HAVING COUNT(*) > 1SELECT empid, YEAR(orderdate) AS orderyear, COUNT(*) AS numorders ORDER BY empid, orderyear;
1.从 Orders 表查询数据
2.根据条件筛选客户ID等于71的
3.对客户id和订单年度 进行分组
4. 再选出大于一个订单的组
5.返回查询出的数据 以及你要展示的字段
6.最终对客户id 和订单 进行排序
7.输出
输入的键入顺序和处理顺序不一致是有原因的,SQL设计师是为了让用户按照英文的方式提供自己的请求
建议、坑
1. from 表时 最好给定 库名和表名 Sales.Orders 让表显示表示 不用程序检索。
2. where 子句相当重要 SQL Server 会对where 条件 进行评估访问请求数据要使用的索引,通过索引可以大大减少表扫描时间
同时 where 子句检索 完成后 它返回的是检索结果为True的行 ,但始终记住, SQL 数据库使用三值谓词逻辑,也就是说有三个结果。
True,False 或 UNKNOWN , 返回true 行 并不等同于 不返回False 实际上是不返回 False 行 和 UNKNOWN 行 以后会再博客中专门讲NULL。
3.记住除count(*)之外, 聚合函数都是忽略NULL标记 如果有一组数据“1,1,3,4,5,null”列名为qty 表达式Count(*) 返回的是6 但是 Count(qty)
是5 count中给定显示值 就会默认寻找已知值 也可以 count(distinct qty ) 返回的是4 去重复 这个 可以用来 处理 返回每个不重复统计问题很方便 它和 select distinct 有很大性能区别 以后会细讲 也可以 sum(distinct qty ) 是13 也是用作统计不重复数据。
4.因为 group by 属于行处理 在having 先计算所以having 中可以出现 聚合函数 。
5.像上面的 “YEAR(orderdate)” SQL Server 只对它运行一次 能识别查询中重复使用的相同表达式
6.最好别使用 select * 尽管你要查询 所有字段。
7.使用 order by 对有大量重复的字段进行排序是无效的 例如对日期进行排序 这样一个排序选10条 会有多个被认为是对的结果 所以我们要确保排序字段的数据唯一性, 以及在 select distinct 时 排序 会导致 单个结果对应多个源数据行。
T-SQL:SQL语句处理顺序的坑(四)的更多相关文章
- SQL select语句执行顺序
sql查询原理和Select执行顺序 关键字: 数据库 一 sql语句的执行步骤 1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义. 2) 语义分析,检查语句中涉及的所有数据库对象是 ...
- sql查询语句查询顺序
一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...
- 浅谈SQL优化入门:1、SQL查询语句的执行顺序
1.SQL查询语句的执行顺序 (7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_ ...
- Oracle sql语句执行顺序
sql语法的分析是从右到左 一.sql语句的执行步骤: 1)词法分析,词法分析阶段是编译过程的第一个阶段.这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构 ...
- 45、SQL逻辑查询语句执行顺序
一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...
- 关于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(开始使 ...
- 9、SQL逻辑查询语句执行顺序
本篇导航: SELECT语句关键字的定义顺序 SELECT语句关键字的执行顺序 准备表和数据 准备SQL逻辑查询测试语句 执行顺序分析 一.SELECT语句关键字的定义顺序 SELECT DISTIN ...
- SQL逻辑查询语句执行顺序 需要重新整理
一.SQL语句定义顺序 1 2 3 4 5 6 7 8 9 10 SELECT DISTINCT <select_list> FROM <left_table> <joi ...
随机推荐
- offset系列、scroll系列与client系列
offset系列: offsetLeft:获取元素距离最左边的距离,自身的margin包括在内,不包括自身的border offsetTop:获取元素距离最上边的距离,自身的margin包括在内,不包 ...
- Maven package 报错解决记录以及编译scala的pom.xml
可以打包的pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:/ ...
- 背水一战 Windows 10 (118) - 后台任务: 后台下载任务(任务分组,并行或串行执行,组完成后通知)
[源码下载] 背水一战 Windows 10 (118) - 后台任务: 后台下载任务(任务分组,并行或串行执行,组完成后通知) 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 ...
- Android开发 - 掌握ConstraintLayout(七)辅助线(Guideline)
了解过UI设计的同学都知道,在设计的时候,我们经常在界面上拖进一些辅助线来帮我们对齐UI元素,或者方便我们统一的页边距. 在ConstraintLayout的编辑器中,同样也支持这样的功能,我们可以创 ...
- 【洛谷3865】 【模板】ST表(猫树)
传送门 洛谷 Solution 实测跑的比ST表快!!! 这个东西也是\(O(1)\)的,不会可以看我上一篇Blog 代码实现 代码戳这里
- 阿里,百度面试90%会问的Java面试题
题目一 请对比 Exception 和 Error,另外,运行时异常与一般异常有什么区别? 考点分析: 分析 Exception 和 Error 的区别,是从概念角度考察了 Java 处理机制.总的来 ...
- Javascript高级编程学习笔记(28)—— BOM(2)window对象2
今天讲一下window对象和浏览器导航,弹窗等有关的内容 导航和打开窗口 window.open() 用于导航到某个特定 url 该方法接收四个参数 1.url 2.窗口目标(当页面中有多个框架fra ...
- Java核心技术卷一基础知识-第10章-部署应用程序和applet-读书笔记
第10章 部署应用程序和applet 本章内容: * JAR文件 * Java Web Start * applet * 应用程序首选项存储 10.1 JAR文件 一个JAR文件既可以包含类文件,也可 ...
- [Postman]生成代码段(17)
在Postman中完成并保存您的请求后,您可能希望从您自己的应用程序发出相同的请求.Postman允许您生成各种语言和框架的代码片段,以帮助您实现此目的.您需要单击蓝色发送按钮下的**代码**链接以打 ...
- netty入门(一)
1. netty入门(一) 1.1. 传统socket编程 在任何时候都可能有大量的线程处于休眠状态,只是等待输入或者输出数据就绪,这可能算是一种资源浪费. 需要为每个线程的调用栈都分配内存,其默认值 ...