首先看上边一条比较成功语句,都以相比宽泛的第一字。
USE Temp;
SELECT empid, YEAR(orderdate) AS orderyear, COUNT(*) AS numorders
FROM Sales.Orders
WHERE custid = 71
GROUP BY empid, YEAR(orderdate)
HAVING COUNT(*) > 1
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(*) > 1
SELECT empid, YEAR(orderdate) AS orderyear, COUNT(*) AS numorders
ORDER BY empid, orderyear;
1.从 Orders 表查询数据
2.基于条件筛选客商ID等于71的
3.对顾客id和订单年度 举办分组
5.重返查询出的数据 以致你要显得的字段
6.说起底对顾客id 和订单 进行排序
7.输出
输入的键入顺序和拍卖顺序差异样是有来头的,SQL设计员是为了让客户遵照菲律宾语的方法提供温馨的伸手
建议、坑
并且 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.像上边的 “YEAPRADO(orderdate)” SQL Server 只对它运维二回 能辨识查询中重复使用的同等表明式
6.最棒别使用 select * 固然你要查询 全部字段。
7.行使 order by 对有多量双重的字段实行排序是无用的 比如对日期实行排序 那样三个排序选10条 会有七个被认为是对的结果 所以大家要力保排序字段的数据独一性, 以至在 select distinct 时 排序 会导致 单个结果对应八个源数据行。
本文由六和开奖现场发布于香港六和开奖现场直播,转载请注明出处:SQL语句处理顺序的坑