网站公告列表     变态下载新版:http://down.biantai.net  [admin  2008年1月16日]        
加入收藏
设为首页
联系站长
站长学院 网页制作 网络编程 图形图象 数据库类 服务器类 操作系统
站长供求 网站交易 域名交易 程序交易 服务器空间 下载反馈 软件报错
网站运营 搜索优化 建站心得 业界新闻 网站推广 普通留言
精品源码 ASP源码 PHP源码 .NET源码 JSP源码 建站素材 建站书籍
软件下载 站长软件 常用软件 系统辅助 电影游戏 站长工具 QQ素材站
字体下载 中文字体 英文字体 图形字体 其他字体 变态论坛 变态下载07版
桌面壁纸 系统壁纸 动植物类 游戏卡通 女性主题 高清壁纸 其他壁纸
您现在的位置: 变态下载 >> 站长学院 >> 数据库类 >> 正文
  在SQL Server中使用相关子查询            【字体:
在SQL Server中使用相关子查询
作者:佚名    文章来源:不详    点击数:    更新时间:2008-1-25    

子查询是指将一条SQL Sever语句嵌入到另一条SQL Sever语句中。数据库引擎将子查询做为虚表执行查询操作。子查询可做为连接语句中的一个表,可做为选择语句中的一个值,也可以是SQL Sever查询子句,还可以是SQL Sever查询子句的字句,与数据操作语句混合在一起。

子查询的执行依赖于嵌套查询。查询树从最里层开始,一层一层向外执行。高层的嵌套查询可以访问低层嵌套查询的结果。

什么是相关子查询?

与经典子查询不同,相关子查询依赖于外部查询。外部查询和子查询是有联系的,尤其在子查询的WHERE语句中更是如此。相关子查询的工作方式是:在子查询中找到外部查询的参考时执行外部查询,此时将结果返回给子查询。然后在外部查询返回的结果集上执行子查询操作。

相关子查询的执行性能

由于相关子查询中的子查询在外部查询返回的结果集上进行执行,其效率肯定下降。子查询的性能完全依赖于查询和有关的数据。但是,如果相关子查询的语句写得很有效率,则其执行性能能够胜过那些使用几个连接和临时表的程序。

一个示例

相关子查询的一个主要优点在于,它能完成传统SQL Sever查询不能解决的问题。例如,使用相关子查询可以轻易完成这样的任务:获得连续的销售总计结果或每一个州中出售最多的商品。

下面的例子说明了如何使用相关子查询创建运行总计的过程。首先,运行下面的脚本创建一个例表:

CREATE TABLE SalesHistory

(SaleID INT IDENTITY(1,1),
Product VARCHAR(30),
      SaleDate SMALLDATETIME,
      SalePrice MONEY

)

现在,这个表保存了这些数据字段,让我们运行脚本程序向其中添加一些记录。Listing A中显示了向表中输入的300条记录的程序,其中SalePrice有些变化。

Listing A

DECLARE @i SMALLINT
SET @i = 1

WHILE (@i <=100)
BEGIN
      INSERT INTO SalesHistory
      (Product, SaleDate, SalePrice)
      VALUES
      ('Computer', DATEADD(mm, @i, '3/11/1919'), DATEPART(ms, GETDATE()) + (@i + 57) )

      INSERT INTO SalesHistory
      (Product, SaleDate, SalePrice)
      VALUES
      ('BigScreen', DATEADD(mm, @i, '3/11/1927'), DATEPART(ms, GETDATE()) + (@i + 13) )

      INSERT INTO SalesHistory
      (Product, SaleDate, SalePrice)
      VALUES
      ('PoolTable', DATEADD(mm, @i, '3/11/1908'), DATEPART(ms, GETDATE()) + (@i + 29) )

      SET @i = @i + 1
END

虽然SalePrice的变化不大,但是也足以说明相关子查询如何工作。接下来,运行Listing B中的相关子查询程序创建销售报表。

Listing B

SELECT
SaleDate, Product, SalePrice,
ISNULL(
(
      SELECT
            SUM(SalePrice)
      FROM
            SalesHistory sh1
      WHERE
            Sh1.Product = sh.Product AND
            Sh1.SaleID < sh.SaleID
),0) AS RunningTotal
FROM SalesHistory sh
ORDER BY Product, SaleID

在报表中引入的连续的销售总计查询即是相关子查询。对于表中的每种产品,相关子查询重述了其结果集,并且在将结果返回到结果集之前,为每一种售出产品的SalePrice进行加和操作。

试一试

试着运行一下上面的例子,并且玩玩这些代码。对于我来说,可以从例子中学到很多新技术。如果已经精通了相关子查询的原理,则可以考虑让自己进入数据库开发者的高层梯队。

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    浅析SQL Server与Oracle数据…
    转换 SQL数据库时的疑难问题…
    理解SQL Server 中的错误处理…
    常用 SQL 语句大全…
    MSSQL数据库索引的应用
    SQL蠕虫防火墙当前无法遏止的…
    SQL Server 管理常用的SQL和…
    SQL Server 2000桌面引擎默认…
    MS SQL SERVER2005 XML 最佳…
    SQL Server数据库中使用触发…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    变态下载 2006-2008 保留网站解释权利。感谢网友对本站的支持,我们一直在努力!

    鲁ICP备06027999号 站长:韩江波