快速业务通道

《SQL Server 2005技术内幕:T-SQl查询》:常见sql问题归类解答

作者 佚名技术 来源 数据库编程 浏览 发布时间 2012-03-21
    这本书差20页就看完了。本来以为这本书的主题是sql server 2005的t-sql的讲解,读完后发现不是。书中并没有系统讲解t-sql。前三章讲查询的原理,后面六章把常见的sql问题分类,每章一类:第4章子查询、表表达式和排名函数,第5章联接和集合操作,第6章聚合和旋转数据,第7章TOP和ALLPY,第8章数据修改,第9章图、树、层次结构和递归查询。
      作者在序言中说过,仔细阅读本书,并且花些时间做书中的练习,可以在短时间内掌握作者十几年积累的经验。我看完本书并且基本把书中的代码看过一遍,感觉确实学到了作者的许多经验,作者经验非常丰富。许多解决方案表现出来的不光是作者在sql上的技巧,其中的算法也很值得学习。另外许多问题都给出sql server 2000下的解决方案和sql server 2005下的解决方案。下面举两个例子:
       1。快速生成一个数据表,只有一列,这一列的值从1到8000,sql只需要执行14次(第一条sql插入数据1,后面12次把2的12次方4096以内的数据插入,后面剩下的8000-4096个数字一次生成)而不是8000次:
SET NOCOUNT ON;
USE tempdb;
GO
IF OBJECT_ID(''dbo.Nums'') IS NOT NULL
  DROP TABLE dbo.Nums;
GO
CREATE TABLE dbo.Nums(n INT NOT NULL PRIMARY KEY);
DECLARE @max AS INT, @rc AS INT;
SET @max = 8000;
SET @rc = 1;

INSERT INTO Nums VALUES(1);
WHILE @rc * 2 <= @max
BEGIN
  INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums;
  SET @rc = @rc * 2;
END

INSERT INTO dbo.Nums
  SELECT n + @rc FROM dbo.Nums WHERE n + @rc <= @max;
GO
      2。对于递归结构的表,作者介绍了常见的设计方式(递归)之外,还介绍了Joe Celko提出的嵌套集合模型。并给出了自己的更快速的实现方法。这个模型在数的每个节点上设置两个值:左值和右值。左值小于所有的下级节点的左值,右值大于所有的下级节点的右值,最终计算递归关系非常快。当然这种模型中一个节点的改变会导致平均一半的节点需要重新计算左值和右值,因此不适合需要经常实时变化的数据表。具体的sql比较长,有兴趣可以看书或者下载本书的源代码。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号