首先看下面一条比较完成语句,都是比较常见的关键字。

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  时 排序 会导致 单个结果对应多个源数据行。

最新文章

  1. leetcode一些常用函数
  2. 吉特仓库管理系统-ORM框架的使用
  3. SSO 单点登录实现
  4. 在CentOS系统中使用yum安装指定版本软件的方法
  5. header、footer、hgroup、address
  6. android_demo之自动生成动态表格
  7. linux下mysql的忘记root密码的解决办法
  8. VS2013 试用版到期 解决办法
  9. android zxing自定义界面,点击按钮开关闪光灯
  10. linux查找命令find
  11. 记一次jar包冲突
  12. [物理学与PDEs]第4章第3节 一维反应流体力学方程组 3.3 一维反应流体力学方程组的数学结构
  13. DUMP3 企业级电商项目
  14. 【Android】ContentValues的用法
  15. ab压力测试nginx
  16. 前后台分离开发--文件上传与下载,cookie,session
  17. KEIL C51 printf格式化输出特殊用法
  18. 【BZOJ4144】[AMPPZ2014]Petrol 最短路+离线+最小生成树
  19. grub的安装与配置-------引导redhat grub
  20. media(适配)

热门文章

  1. 没有job offer,拿加拿大工签PGWP回国如何续签加拿大小签?
  2. C# WebAPI系列(2)
  3. 《python语言程序设计》_第三章(数字函数、字符串和对象)
  4. Python序列结构--集合
  5. 【java】java反射初探 ——“当类也学会照镜子”
  6. 为什么需要提前撰写Spec文档
  7. 使用bat脚本部署hexo到coding和github
  8. 深入浅出Redis
  9. WHERE 子句用于规定选择的标准
  10. Redis(4)---主从复制