您的位置:首页 > 数据库

SQL Server 2005 笔记(第一章:逻辑查询处理)

2012-05-13 17:56 267 查看
此篇文章是在读取《Microsoft SQL Server 2005技术内幕:T-SQL查询》做的记录
《Microsoft SQL Server 2005技术内幕:T-SQL查询》的下载地址

第一部分的下载地址:http://download.csdn.net/source/2922760

第二部分的下载地址:http://download.csdn.net/source/2922763

第三部分的下载地址:http://download.csdn.net/source/2922766

第四部分的下载地址:http://download.csdn.net/source/2922769

《Microsoft SQL Server 2005技术内幕:T-SQL程序设计》的下载地址

第一部分的下载地址:http://download.csdn.net/source/2918919

第二部分的下载地址:http://download.csdn.net/source/2918920

第三部分的下载地址:http://download.csdn.net/source/2918923

第四部分的下载地址:http://download.csdn.net/source/2918925

第一章:逻辑查询处理
1.SQL 中查询的三个筛选器:on,where,having

2.三值逻辑(Three-Valued Logic):true,false,unknown SQL特有

3.如果连接两个以上的表,将对虚拟表VT3和Form 子句中的第三表重复执行步骤1到步骤3

4.交换两列的数据:update test set t1=t2,t2=t1 逻辑上,所有操作同时发生,就好像在整个操作完成前不会修改表,然后计算结果替换源数据

5.在T-SQL语句中,如果使用了Group by ,再使用Distinct是多余的,它不会移除任何行

6.SQL是基于集合理论的。集合不会预选对它的行排序,它只是成员的逻辑集合,成员的顺序无关紧要。对表进行排序的查询可以返回一个对象,包含特定物理顺序组织的行。ANSI把这种对象成为游标。

7.尽管SQL并不为表中的行呈现特定的顺序,但它却按特定顺序维护列的位置。指定Select * (不建议这样写)可以缺报按特定顺序返回列

8. 使用了order by 子句的查询不能用作表表达式,因为返回的是游标。

表表达式包括:视图,内联表值函数,子查询,派生表和共用表达式(CTE)。它的结果必须返回给期望得到物理记录集的客户端应用程序。

例如:下面的派生表查询无效,并产生一个错误

select * from (select orderid,customerid from dbo.Orders order by orderid) as d

同样下面的视图也无效

create view dbo.VSortedOrders
as
select orderid,customerid from dbo.Orders order by orderid
go

错误信息为:
除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。


表表达式中不允许使用带有Order by子句的查询,而在T-SQL中却有一个例外(应用TOP选项)。

9.ANSI 并为规定NULL比以知值排位高还是低,而是把这个问题留给了具体实现。T-SQL把NULL排位比已知值低。

10.TOP选项是T-SQL特有的,不属于关系范畴。

11.TOP选项允许你指定要返回的行数或百分比(取整)。在SQL Server2000中,TOP的输入必须是一个常量,而在SQLServer 2005中,输入可以是任何独立的表达式。

12.TOP查询经常与ORDER BY 子句大杯使用以确定要返回的行。在表达式中只指定TOP查选而未指定ORDER BY子句没有多大意义。因此,同时指定了TOP子句和ORDER BY子句的查询可以返回一个关系结果。

13.除非你确定需要有序行,否则不要指定order by子句。排序是需要成本的,SQL Server需要执行有序索引扫描(ordered index scan)或使用排序运算符。

14.Apply,pivot,unpivot 不是ANSI运算符,而是T-SQL所特有的扩展。

15.与连接一样,所有表运算符都会用虚拟表作为它们的左输入,位于From 子句的第一个运算符用一个表表达式作为左输入并返回一个虚拟表作为结果。表表达式可以表示许多对象:真实的表、临时表、表变量、派生表、CTE、视图、表值函数。

16.pivot 运算符用于把数据从多行的分组状态旋转为没一组位于一行的多列状态,并在该过程中执行聚合运算。

17.OVER 子句允许你请求基于窗口(window-based是指用户指定的一组行)的计算。在SQL Server 2005 中,该子句是聚合函数(包括内置的和基于CLR的自定义聚合函数)的新选项,同时也是四个新排名函数(ranking function)(row_number,rank,dense_rank和ntile)的比选项。如果指定了OVER子句,它的输入将代替查询的group by 列表,用于指定的聚合或排名函数进行计算时所基于的分区和排序。

18.PARTITION BY 子句定义了用于计算的窗口(window)。

19.SQL Server 2005 支持三种集合操作:UNION,EXCEPT和intersect。

20.UNION返回包含两个输入中所有行的结果集。如果未指定ALL选项,UNION将从结果集中移除重复行。EXCEPT返回出现在左输入但未出现在右输入的不重复行。INTERSECT返回在两个输入中都出现过的不重复行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: