网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > SQL技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.SQL IF..ELSE..在存储过程的使用.
.一种基于记录集查找特定行的方法.
.TOP N 和SET ROWCOUNT N 哪个更快.
.SQL语句导入导出大全.
.由于NLS参数设置不当导致的性能问.
.教你使用SQL Server数据库进行网.
.解决sqlserver2005中文版与vs200.
.面向对象设计过程中必须遵守的相.
.dp备份检查时发现有session报错的.
.sa登陆失败 SQL Server错误18456.
.SQL Server 2005 - 如何实作CLR存.
.SQL Server 2000的数据转换服务(.
.SQL Server 存储过程的经典分页.
.使用VS 2005和SQL Server 2005创.
.将多表格查询合并至单一声明的常.
.如何取得一个表的所有字段名用逗.
.关于sql server下无限多级别分类.
.SQL2005生成SQL2000脚本的一些解.
.SQL2005中部署.net 3DES加密函数.
.讲解FORALL与BULK COLLECT的使用.

SQL语句应当如何使用内嵌视图与临时表

发表日期:2008-4-1


许多情况下,查询需要将数据与其他一些可能只能通过执行 GROUP BY 然后执行标准查询才能收集的数据进行联接。例如,如果要查询最新五个定单的有关信息,您首先需要知道是哪些定单。这可以使用返回定单 ID 的 SQL 查询来检索。此数据就会存储在临时表(这是一个常用技术)中,然后与 Products 表进行联接,以返回这些定单售出的产品数量:

CREATE TABLE #Temp1 (OrderID INT NOT NULL, _ 
                    
OrderDate DATETIME NOT NULL)INSERT INTO #Temp1 (OrderID, OrderDate)SELECT
     
TOP 5 o.OrderID, o.OrderDateFROM Orders o ORDER BY o.OrderDate DESCSELECT 

p.ProductName, SUM(od.Quantity) AS ProductQuantityFROM     #Temp1 t 
    
INNER JOIN [Order Details] od ON t.OrderID = od.OrderID  
  
INNER JOIN Products p ON od.ProductID = p.ProductID 
GROUP BY p.ProductNameORDER BY p.ProductNameDROP TABLE #Temp1

这些SQL语句会创建一个临时表,将数据插入该表中,将其他数据与该表进行联接,然后除去该临时表。这会导致此查询进行大量 I/O 操作,因此,可以重新编写查询,使用内嵌视图取代临时表。内嵌视图只是一个可以联接到 FROM 子句中的查询。所以,您不用在 tempdb 中的临时表上耗费大量 I/O 和磁盘访问,而可以使用内嵌视图得到同样的结果:

SELECT p.ProductName,     
SUM(od.Quantity) AS ProductQuantityFROM
     
(SELECT TOP 5 o.OrderID, o.OrderDate 
   
FROM     Orders o     ORDER BY o.OrderDate DESC    ) t 
    
INNER JOIN [Order Details] od ON t.OrderID = od.OrderID 
   
INNER JOIN Products p ON od.ProductID = p.ProductID GROUP BY 
   
p.ProductNameORDER BY    p.ProductName

此查询不仅比前面的查询效率更高,而且长度更短。临时表会消耗大量资源。如果只需要将数据联接到其他查询,则可以试试使用内嵌视图,以节省资源。

上一篇:循环插入一定时间范围内的随机日期值 人气:1111
下一篇:讲解如何检查使用空间大于90%的表空间 人气:1065
浏览全部内嵌视图与临时表的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐