SQLServer子查询可以分为相关子查询和嵌套子查询两类。前提,假设Books表如下:
类编号图书名 出版社价格
--------------------------------------------------------
2 c#高级应用 圣通出版 23.00
2 Jsp开发应用机械出版社 45.00
3 高等数学 济南出版社 25.00
3 疯狂英语 清华大学出版社 32.00
嵌套子查询的执行不依赖与外部的查询。执行过程:
(1)执行子查询,其结果不被显示,而是传递给外部查询,作为外部查询的条件使用。
(2)执行外部查询,并显示整个结果。
嵌套子查询一般可以分为:返回 单值的子查询 和 返回一个列表的子查询 ,下面举例说明:
1.返回单值:
--查询所有价格高于平均价格的图书名,作者,出版社和价格。
USE tempdb
GO
SElECT 图书名,作者,出版社,价格
FROM Books
WHERE 价格 >
(
SELECT AVG(价格)
FROM Books
)
GO
2.返回值列表
--查询所有借阅图书的读者信息
SElECT *
FROM Readers
WHERE 读者编号 IN
(
SELECT 读者编号
FROM [Borrow History]
)
GO
相关子查询的执行依赖于外部查询。多数情况下是子查询的WHERE子句中引用了外部查询的表。执行过程:
(1)从外层查询中取出一个元组,将元组相关列的值传给内层查询。
(2)执行内层查询,得到子查询操作的值。
(3)外查询根据子查询返回的结果或结果集得到满足条件的行。
(4)然后外层查询取出下一个元组重复做步骤1-3,直到外层的元组全部处理完毕。
下面举例说明:
--查询Booka表中大于该类图书价格平均值的图书信息
SElECT 图书名,出版社,类编号,价格
FROM Books As a
WHERE 价格 >
(
SELECT AVG(价格)
FROM Books AS b
WHERE a.类编号=b.类编号
)
GO
与前面介绍过的子查询不同,相关子查询无法独立于外部查询而得到解决。该子查询需要一个“类编号”的值。而这个值是个变量,随SQLSever检索Books表中的不同行而改变。下面详细说明该查询执行过程:
先将Books表中的第一条记录的“类编号”的值“2”代入子查询中,子查询变为:
SELECT AVG(价格)
FROM Books AS b
WHEREb.类编号=2
子查询的结果为该类图书的平均价格,所以外部查询变为:
SElECT 图书名,出版社,类编号,价格
FROM Books As a
WHERE 价格> 34
如果WHERE条件为True,则第一条结果包括在结果集中,则否不包括。同样对类编号2进行对Books表中的所有行运行相同的过程,最后形成的结果集及最后返回结果。
类编号图书名
出版社价格
--------------------------------------------------------
2 c#高级应用 圣通出版 23.00
2 Jsp开发应用机械出版社 45.00
3 高等数学 济南出版社 25.00
3 疯狂英语 清华大学出版社 32.00
此时第一条条目的价格为23(不符合价格>34)。所以,这一条不会包括在结果集中。
接着,将Books的第二条记录代入子查询中,此时,价格45>34。因此就会将第二条加入结果集中。
第三条,25<28.5,不包含。
第四条,32>28.5,包含。
所以,结果会包含2条记录:
2 Jsp开发应用机械出版社 45.00
3
疯狂英语 清华大学出版社 32.00
本文在原文基础上略有修改。
转自:http://www.cnblogs.com/Ryan_j/archive/2010/10/20/1857026.html
相关推荐
在 SQL Server 中,有两种子查询类型:标准子查询和相关子查询。标准子查询执行一次,结果反馈给父查询。而相关子查询每行执行一次,由父查询找回。嵌套子查询(nested subqueries)是指子查询中包含一个子查询。...
在SQL Server数据库中,子查询是一种强大的工具,用于在单个SELECT语句中执行复杂的查询逻辑。嵌套子查询则是这种技术的一个高级形式,它在一个子查询内部再包含另一个子查询,以解决更复杂的数据库查询问题。理解并...
在SQL Server 2005中,多表查询和子查询是数据库操作的重要组成部分,用于从多个相关的数据源中获取信息。这些技术是数据分析和业务智能的基础,对于数据库管理员和开发人员来说至关重要。 多表查询,也称为联接...
使用SQL Server数据库嵌套子查询的方法 在本文中,我们将探索使用SQL Server数据库嵌套子查询的方法。嵌套子查询是一种强大的工具,能够帮助我们解决复杂的数据查询问题。我们将从基础知识开始,逐步深入,探索嵌...
2. **子查询与联接查询**:深入讲解如何使用子查询进行复杂的数据筛选,以及如何通过联接查询处理多表数据,包括嵌套子查询、存在子查询、IN和NOT IN子查询等。 3. **聚合函数与分组统计**:介绍COUNT、SUM、AVG、...
- **减少子查询**:尽可能避免嵌套子查询,改用JOIN或子查询的外部查询,以提高查询效率。 - **使用UNION ALL代替UNION**:当不需要去除重复行时,使用UNION ALL替代UNION,以减少不必要的数据处理开销。 - **避免...
5. **ROWNUM 在子查询中的应用:** - 在复杂查询中,可以通过嵌套子查询来使用 ROWNUM。例如: ```sql SELECT * FROM (SELECT ROWNUM no, id, name FROM student) WHERE no > 2; ``` 这个例子中,外层查询通过 ...
3.3 相关子查询 3.4 派生表 3.5 EXISTS运算符 3.6 INTERSECT和EXCEPT运算符 3.7 通用表表达式(CTE) 3.8 递归查询 3.9 合并 3.10 利用外部调用完成复杂操作 3.11 性能考虑 3.12 小结 ...
- 实现子查询,包括相关子查询和嵌套子查询。 - 实现数据类型,了解不同数据类型的特点及其适用场景。 - 实现聚合查询,使用聚合函数如SUM、AVG、MIN、MAX和COUNT进行数据分析。 - 查询和管理XML数据,了解SQL ...
书中的内容可能会涵盖嵌套子查询、关联子查询以及使用IN、EXISTS和NOT EXISTS子查询的各种技巧。 T-SQL还包括流程控制语句,如IF...ELSE、WHILE、BEGIN...END等,这些允许在数据库级别实现条件逻辑和循环。此外,...
10.2.2 in子查询实现集合交和集合差运算 191 10.2.3 exists子查询 192 10.2.4 exists子查询实现两表交集 194 10.2.5 some/all子查询 195 10.2.6 unique子查询 197 10.3 相关子查询 198 10.3.1 使用in引入相关...
3.3 相关子查询 3.4 派生表 3.5 EXISTS运算符 3.6 INTERSECT和EXCEPT运算符 3.7 通用表表达式(CTE) 3.8 递归查询 3.9 合并 3.10 利用外部调用完成复杂操作 3.11 性能考虑 3.12 小结 ...
根据给定的文件标题、描述、标签以及部分内容来看,虽然部分内容并未给出具体的知识点,但从标题“SQLServer数据库设计和高级查询13”可以推测出本篇内容将围绕SQL Server数据库的设计原则与高级查询技巧展开。...
10.5 UNIQUE子查询与嵌套子查询 10.5.1 UNIQUE子查询 10.5.2 嵌套子查询 10.6 小结第4篇 T-SQL开发常用操作篇第11章 数据的维护操作 11.1 数据的插入操作 11.1.1 INSERT语句的基本语法 11.1.2 插入单条记录 11.1.3 ...
以上都是SQL Server中关于数据查询和操作的基础知识点,包括但不限于子查询、联接(JOIN)、聚合函数(COUNT、AVG等)、分组(GROUP BY)、条件过滤(WHERE、HAVING)、嵌套查询和自连接等。掌握这些技巧对于数据库...