网络编程
位置:首页>> 网络编程>> Asp编程>> SQL子查询全接触

SQL子查询全接触

作者:dnawo  发布时间:2007-08-20 10:51:00 

标签:sql,查询,子查询

一、什么是sql子查询?
 
子查询是一个嵌套在Select 、Insert 、Update 或Delete语句或其他子查询中的查询。任何允许使用表达式的地方都可以使用子查询。子查询也称为内部查询或内部选择,而包含子查询的语句也称为外部查询或外部选择。
在以下示例中,子查询在Select语句中被用作名为 MaxUnitPrice 的列表达式。
 


Select or d.SalesOr   derID, or d.Or derDate, 
    (Select MAX(Or dDet.UnitPrice) 
     FROM AdventureWor  ks.Sales.SalesOr derDetail AS or dDet 
     Where or d.SalesOr derID = or dDet.SalesOr derID) AS MaxUnitPrice 
FROM AdventureWor ks.Sales.SalesOr derHeader AS ord



许多包含子查询的 Transact-SQL 语句都可以改用联接表示。其他问题只能通过子查询提出。在 Transact-SQL 中,包含子查询的语句和语义上等效的不包含子查询的语句在性能上通常没有差别。但是,在一些必须检查存在性的情况中,使用联接会产生更好的性能。否则,为确保消除重复值,必须为外部查询的每个结果都处理嵌套查询。所以在这些情况下,联接方式会产生更好的效果。以下示例显示了返回相同结果集的Select子查询和Select联接:
 


/* Select statement built using a subquery. */ 
Select Name 
FROM AdventureWor ks.Production.Product 
Where ListPrice = 
    (Select ListPrice 
     FROM AdventureWor ks.Production.Product 
     Where Name = ’Chainring Bolts’ ) 
  
/* Select statement built using a join that returns 
   the same result set. */ 
Select Prd1. Name 
FROM AdventureWor ks.Production.Product AS Prd1 
     JOIN AdventureWor ks.Production.Product AS Prd2 
       ON (Prd1.ListPrice = Prd2.ListPrice) 
Where Prd2. Name = ’Chainring Bolts’


嵌套在外部Select语句中的子查询包括以下组件:
 
●包含常规选择列表组件的常规Select查询。
●包含一个或多个表或视图名称的常规 FROM 子句。
●可选的 Where 子句。
●可选的 GROUP BY 子句。
●可选的 HAVING 子句。
 
子查询的Select查询总是使用圆括号括起来。它不能包含COMPUTE 或 FOR BROWSE 子句,如果同时指定了 TOP 子句,则只能包含 or DER BY 子句。
 
子查询可以嵌套在外部 Select,Insert,Update 或 Delete语句的 Where 或 HAVING 子句内,也可以嵌套在其他子查询内。尽管根据可用内存和查询中其他表达式的复杂程度的不同,嵌套限制也有所不同,但嵌套到 32 层是可能的。个别查询可能不支持 32 层嵌套。任何可以使用表达式的地方都可以使用子查询,只要它返回的是单个值。
 
如果某个表只出现在子查询中,而没有出现在外部查询中,那么该表中的列就无法包含在输出(外部查询的选择列表)中。
 
包含子查询的语句通常采用以下格式中的一种: 
 

●Where expression [NOT] IN (subquery)
●Where expression comparison_operator [ANY | ALL] (subquery)
●Where [NOT] EXISTS (subquery)
在某些 Transact-SQL 语句中,子查询可以作为独立查询来计算。从概念上说,子查询结果会代入外部查询(尽管这不一定是 Microsoft SQL Server 2005 实际处理带有子查询的 Transact-SQL 语句的方式)。
 
有三种基本的子查询。它们是:
 
●在通过 IN 或由 ANY 或 ALL 修改的比较运算符引入的列表上操作。
●通过未修改的比较运算符引入且必须返回单个值。
●通过 EXISTS 引入的存在测试。

0
投稿

猜你喜欢

  • 1.文档对象模型(DOM)DOM是HTML和XML文档的编程基础,它定义了处理执行文档的途径。编程者可以使用DOM增加文档、定位文档结构、填
  • 本文介绍使用ADODB.Stream组件来下载服务器文件,例如:download.asp?file=相对路径的文件。就可以把这个文件下载下来
  • 1.查询高于平均价格的商品名称:SELECT item_name FROM ebsp.product_mark
  • 突然发现自己对Web前端技术掌握得很少很少,就是自己最感兴趣的XHTML+CSS部分知道也不算多。在XHTML 1.1规定的诸多元素中,我平
  • 如果查询结果很多,服务器解释你的ASP script将花费大量的时间,因为有许多的Response.Write语句要处理. 如果你将输出的全
  • 浏览带有下拉菜单的网页时,我们经常会注意到当更改显示器分辨率时,其下拉菜单的位置并没有改变,这也是我们设计网页时容易忽略的一个问题,其实通过
  • asp三天学好ADO对象之第一天 今天说一下Recordset 对象的属性1、CursorType 属性AdOpenForwardOnly:
  • 想必大家都很喜欢用Word打字,用Excel进行计算和规划,用PowerPoint作幻灯片进行展示…,但是这只用到了Office系列产品的很
  • 命名一直是个让我头痛的问题,特别是那些看上去差不多的模块,所以就得想办法啦,我总结了下面的方法,虽然还在试验中。希望对大家有帮助。欢迎大家提
  • 在Web标准中的页面布局是使用Div配合CSS来实现的。这其中最常用到的就是使整个页面水平居中的效果,这是在页面布局中基本,也是最应该首先掌
  • 代码如下:'******************************************** '函数名:I
  • 第一:编写限制搜索范围的查询语句。众所周知,在数据库查询的时候返回记录的多少直接关系到查询的效率。所以,在客户端通过一定的条件语句,限制搜索
  • 一. 建库,建表,加约束. 1.1建库 代码如下:use master go if exists (select * from sysdat
  • 随着jQuery、Mootools、prototype等知名的JavaScript框架的应用变的越来越强大,浏览器对最新版本CSS属性的支持
  • 一、日期类型:对于SQL Server 2008 来说(因为2000甚至2005已经稍微有被淘汰的迹象,所以在此不作过多说明,加上自己工作使
  • 我用的数据库是Access2000的,系统为Win2000 Advance Server.今天在程序调试中遇到了以下几个怪现象:1.如果Ac
  • 谁在用这些导航google是个大公司,全世界都有google的脚印,韩国的google动画效果非常不错,蓝色理想论坛里已经有人挖过来了,可惜
  • 昨天还和裕波沟通我没有准备ppt,想以另一种互动的方式来交流。后来想想,每个人都准备了,我不准备也不太好意思,呵呵。今天在webrebuil
  • 语法: text-overflow : clip | ellipsis 参数: clip : 不显示省略标记(...),而是简单的裁切 el
  • * 对子查询和Join进行了优化,包括对MyISAD和InnoB存储引擎分散范围内的批量索引访问。* 增加了 BACKUP DATABASE
手机版 网络编程 asp之家 www.aspxhome.com