当前位置:文档之家› 数据库查询语句顺序

数据库查询语句顺序

1.在SQL中,第一个要处理的子句是from子句,尽管select语句第一个出现,但几乎总是放在最后处理,每一步会生成一个虚拟表,该虚拟表会作为下一步的输入,这些虚拟表对于调用者(客户端应用程序或外部查询)是不可用的,只有最后一步生成的虚拟表才会返回给调用者,如果在查询中没有指定某一个子句,则会跳过相应的步骤。

2.逻辑查询处理阶段简介:
(1)from from阶段标识出查询的来源表,处理表运算符。

每个表运算符也会应用一系列的子阶段,
1.执行笛卡尔级(交叉联接)
2.应用on筛选器(联接条件)
3.添加外部行
这一步只在外联接中才会发生,对于外联结,通过为其指定一种联接类型(left,right,full),就把一个或两个输入表标记为保留表,把表标记为保留表,即表示希望返回该表的所有行,即使筛选器on过滤掉了一些行,加上被过滤的行称为外部行,外部行中非保留表的属性(列值)被赋值为null
如果from子句中有多个表运算符,则按从左到右的顺序进行处理,每个表运算符的结果作为下一个表运算符的左输入,最终生成的虚拟表作为下一阶段的输入,
(2)where
(3)Group by
(4)Having
Count(*)会把外部行也统计在内,而count(expression)将忽略null值,子查询不能作为聚合函数的输入,不能使用having sum(select(...)>10)
(5)Select
1.计算表达式
SQL具有另一个特性:多个运算是同时进行计算的
从逻辑上讲,应该假设所有的操作是同时发生的,就好像在整个操作完成之前,没有修改过表,接着再用计算结果替换原来的列值,基于类似的原因,一下update语句将更新T1中的所有行,为c1列加上更新开始时T1中的最大c1值:
Update T1 set c1=c1+(select max(c1) from T1);不用担心最大的c1值会随着操作的进行而持续变化,不会这样,因为操作是瞬间同时发生的。

2.Distinct
3.top
如果指定了不唯一的order by 列表,而且未指定with ties选项,或是根本就没有指定order by 子句,那么top查询就是非确定的,也就是说,返回的行只是SQL Server 碰巧在物理上最先访问到得行,因此可能产生不同的结果。

(6)Order by
对于带有排序作用的order by 子句的查询,可以返回一个对象,其中的行按特定的顺序组织在一起,ansi把这种对象叫做游标。

3.三值逻辑
在SQL的谓词(逻辑表达式)的可能取值为true ,false,和unknown这就是所谓的三值逻辑,
4.当在最外层的查询中使用了top,而不是用top查询定义表表达式时,order by有两种不同的作用:(1),为top选项定义行之间的逻辑优先顺序,(2)为结果游标定义排序顺序
如果带有order by子句的top查询是用于定义表表达式,这时它代表的就是一个没有固定顺序的表,因此在这种情况下,order by子句只是为top 选项定义逻辑顺序,而不保证结果
的排列顺序。

5.。

相关主题