(5)SELECT (5-2) DISTINCT (5-3)TOP(<top_specifications>) (5-1)<select_list>
(1)FROM (1-J) <left_table> <join_type> JOIN <right_table> ON <on_predicate>
| <1-A> <left_table><apply_type> Apply <right_table_exprssion> AS <alias>
| <1-P> <left_table>PIVOT(<pivot_specification>) AS <alias>
| <1-U> <left_table>UNPIVOT(<unpivot_specification>) AS <alias>
(2)WHERE <where_predicate>
(3)GROUP BY <group_by_specification>
(4)HAVING <having_predicate>
(6)ORDER BY <order_by_list>
1. FROM 表示其后标识的是一个表, 不管该表是单个表名或通过N个表运符得到的一个表
1.1 JOIN 运算分三步(CROSS | INNER | OUTER)
1.1.1 执行笛卡尔积
1.1.2 应用ON
1.1.3 添加外部行(outer join)
1.2 APPLY (CROSS | OUTER)
1.2.1 把右表达式应用于左表达式的行
1.2.2 添加外部行(OUTER)
1.3 PIVOT(行转换为列)
1.3.1 分组(未作为PIVOT输入的所有列)
1.3.2 扩展 (为PIVOT添加相应的列)
1.3.3 聚合 (为要生成的列聚合)
example:
SELECT *
FROM (SELECT empid, YEAR(orderdate) AS orderyear, val
FROM Sales.OrderValues) AS OV
PIVOT(SUM(val) FOR orderyear IN([2006],[2007],[2008])) AS P;
1.4 UNPIVOT(列变成行)
1.4.1 生成副本(用UNPIVOT运算符中IN子句中出现的列名填充内容生成一个新列)
1.4.2 提取元素(从源列中提取出与当前副本行相对应的值保存到指定的列中)
1.4.3 删除带有NULL的行
example:
SELECT empid, orderyear, val
FROM dbo.EmpYearValues
UNPIVOT(val FOR orderyear IN([2006],[2007],[2008])) AS U;
生成虚表VT1
2. WHERE阶段
在VT1中满足where predicat条件的行生成虚表VT2
3. GROUP BY
基于VT2返回分组的VT3
4. HAVING
基于VT3满足having predicate 条件生成VT4
5. SELECT
5.1 计算表达式
5.2 应用DISTINCT
5.3 应用TOP
6. ORDER BY
集合运算符(UNION ALL, UNION, EXCEPT, INTERSECT)
第二章集合论和谓词逻辑
子集
补集
并集
交集
差集
第三章关系模型
关系运算符
限制,投影, 积, 并,交,减, 联接, 除