SQL逻辑查询处理步骤(11步)未完待续…
时间:2010-10-17 来源:风的轮廓
列如:表C的结构和数据
L1 L2 L3
1 A 100
1 B 11
2 C 100
3 D 22
3 D 22
查询语句 select L1,L2 from C group by L1,如果编译成功将得到如下结果
L1 L2
1 A
B
2 C
3 D
但是上面结果是无法显示的,所以编译select L1,L2 from C group by L1不通过。如果指定了group by子句。则后面所有的步骤(having,select等)只能指定可以为分组得到标量值的表达式。
该限制是因为的结果集中只能为每一个组包含一行数据(除非该组被过滤掉了)。
所有 对于C表的查询,可以是select L1,count(L2) as count from C group by L1得到结果如下:
L1 Count
1 2
2 1
3 2
group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面。group by主要用于对返回值进行聚合函数计算和查找相同记录。所有null值会被分到一组。
步骤6:应用cube 或rollup选项
步骤7:应用having筛选器
只有符合<having_condition>的组才会成为虚拟表VT6的一部分。having是第一个也是唯一一个应用到已分组数据的筛选器。
步骤8:处理select列表
步骤9:应用distinct子句
步骤10:应用order by子句
步骤11:应用top选项
sql server2005中加入了新的逻辑处理阶段
1、表运算符
2、over 子句
3、集合操作