SQL SELECT

(1)FROM子句

SELECT orderid,custid,empid,orderdate,freight
FROM [TSQLFundamentals2008].[Sales].[Orders];

逻辑处理阶段第一个要处理的查询子句,用于指定要操作的表名,以及对这些表进行操作的表运算符。

(2)WHERE子句

SELECT orderid,custid,empid,orderdate,freight
FROM [TSQLFundamentals2008].[Sales].[Orders]
WHERE custid=71;
可以指定一个谓词或逻辑表达式,从而过滤由from阶段返回的行。
(3)GRUOP BY子句
SELECT empid,YEAR(orderdate) AS orderyear,SUM(freight) AS totalfreight,COUNT(*) AS numorders
FROM [TSQLFundamentals2008].[Sales].[Orders]
WHERE custid=71
GROUP BY empid,YEAR(orderdate);

        对前面逻辑查询处理阶段返回的行按“组”进行组合,每个组由GROUP BY子句中的元素决定,GROUP BY阶段之后的子句中指定的表达式务必保证为每个组只返回一个标量(单值),所以一个元素如果不在GROUP BY子句中,就只能作为聚合函数(MIN、MAX、SUM、AVERAGE、COUNT)的输入,(注:所有的聚合函数都会忽略NULL值,除了COUNT(*))。

(4)HAVING子句

SELECT empid,YEAR(orderdate) AS orderyear,SUM(freight) AS totalfreight,COUNT(*) AS numorders
FROM [TSQLFundamentals2008].[Sales].[Orders]
WHERE custid=71
GROUP BY empid,YEAR(orderdate)
HAVING COUNT(*)>1;
用于指定对组进行过滤的谓词或逻辑表达式。

(5)SELECT子句

SELECT empid,YEAR(orderdate) AS orderyear
FROM [TSQLFundamentals2008].[Sales].[Orders]
WHERE custid=71;
用于指定需要在查询返回的结果集中包含的属性(列),可以选择为目标列分配自定义名称 (AS 别名)。

(6)OVER子句

SELECT custid,orderid,val,SUM(val) OVER(PARTITION BY custid) AS totalcustval,SUM(val) OVER() AS totalval,
  ROW_NUMBER() OVER(ORDER BY val) AS ROWNUM,
  RANK() OVER(ORDER BY val) AS RANKNUM,
  DENSE_RANK() OVER(ORDER BY val) AS DENSE_RANK_NUM,
  NTILE(80) OVER(ORDER BY val)AS NTILE_NUM
FROM [TSQLFundamentals2008].[Sales].[OrderValues];
用于为行定义一个窗口,对窗口中的一组值进行操作,在同一行中同时返回基础行的列和聚合列。
聚合函数和排名函数都是可以支持OVER子句的运算类型,由于OVER子句为这些函数提供了一个行的窗口,所以这些函数也成为开窗函数。
排名函数:ROW_NUMBER行号,RANK排名,DENSE_RANK密集排名,NTILE组号。
(7)DISINTCT子句
 
 

 未完待续。。。
 

猜你喜欢

转载自www.cnblogs.com/datazhj/p/9020135.html