SQL子查询全接触
作者:dnawo 发布时间:2007-08-20 10:51:00
一、什么是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 引入的存在测试。


猜你喜欢
- 前言:学习JavaScript的童鞋都知道,我们在发送网络请求,也就是我们在地址栏输入一个网址,就会自动跳转到当前网址,比如在浏览器网址输入
- 前言我们在开发后台项目常常会遇到一个情况,功能模块列表数据导出Excel功能,但列表中某个字段无法通过Sql联表查询,且一次性查询再匹对也不
- 今天我升级MYSQL到5.1的时候遇到的。写出来共享以下。1、[root@localhost mysql]# scripts/mysql_i
- 当后端并未编写后台json数据,但是前端又要使用数据进行页面的编写,这是便可用mockjs编写一个假的数据源,发送ajax请求并获取数据1.
- 字符画是一种由字母、标点或其他字符组成的图画,它产生于互联网时代,在聊天软件中使用较多,本文我们看一下如何将自己喜欢的图片转成字符画。静态图
- 开发的很多场景中都会用到手机号的校验和验证码的校验,具体实现如下<div> <input type="text&
- 本文实例讲述了python使用pymongo与MongoDB基本交互操作。分享给大家供大家参考,具体如下:本文内容:pymongo的使用:安
- 本文实例讲述了python分支、循环简单用法。分享给大家供大家参考,具体如下:讲程序设计,不得不讲到顺序、分支、循环。顺序就是从上到下运行代
- 我就废话不多说了,大家还是直接看代码吧~#!/usr/bin/env python# -*- coding: utf-8 -*-import
- 我们用python 打包的exe文件的时候,每次运行后面都有一个黑框框,比如我的这个:用tkinter做的图形界面,打包成exe文件,每次运
- 本文实例讲述了Python实现简单过滤文本段的方法。分享给大家供大家参考,具体如下:一、问题:如下文本:## Alignment 0: sc
- el-table格式化el-table-column内容遇到一个需求,一个循环展示的table中的某项,或者某几项需要格式化。对于格式化的方
- 前言“幸运牛牛套圈圈”套住欢乐,圈住幸福,等你来挑战!哈喽,大家上午好,我是你们的栗子同学,今天来给
- 一位资深的设计师曾经向我抱怨,说老板不仅让他做“设计”工作,还让他做“制作”工作,真是很烦。言下之意,“制作”还要一个资深设计师亲自上阵,未
- js 对url进行编码和解码三种编码和解码函数encodeURI和 decodeURI它着眼于对整个URL进行编码,因此除了常见的符号以外,
- 分割成一个包含两个元素列表的列对于一个已知分隔符的简单分割(例如,用破折号分割或用空格分割).str.split() 方法就足够了 。 它在
- 问题官网中给的picker例子,每项只能是个字符串,但我需要它返回每个字符串对应的自定义ID,而不是index。vantUI官网:picke
- ORACLE的这类错误在ORALCE的文档中有详细说明,但原因及措施说明不详细,本文当着重说明如何解决这类错误。1、ORA-12571、OR
- 语法plt.scatter(x, y, s=20, c='b')大小s默认为20,s=0时点不显示;颜色c默认为蓝色。为每一
- 关于使用CTE(公用表表达式)的递归查询----SQL Server 2005及以上版本公用表表达式 (CTE) 具有一个重要的优点,那就是