嵌套子查询与关联子查询的本质区别在哪里呢?

zghzzy 2009-07-06 07:13:53
嵌套子查询与关联子查询的本质区别在哪里呢?
子查询是不是就会这两种,我不知这两种的区别何在?

是不是在内部查询中再次引用外部查询中表的别名的查询就是关联子查询呢?

select *
from tb a
where 字段 =(select 字段 from tb b on b.字段名二=a.字段名二)

上面,外层查询的表别名为a,内层查询的表别名为b,而且内层对外层有引用,是不是这种情况就是关联子查询.
...全文
1096 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
feixianxxx 2009-07-06
  • 打赏
  • 举报
回复
什么是子查询
1.子查询是嵌套在其他查询中的常规的T-SQL查询(用括号括起来),当需要一个SELECT语句作为数据部分的基础或另一个查询中的条件的要素时,就是创建子查询。

2.子查询满足的需求:
(1).把一个查询分解成一系列的逻辑步骤。
(2).提供一个列表作为WHERE子句和 [ IN | EXISTS | ANY | ALL] 的目标对象。
(3).提供由父查询中每一条记录驱动的查找。

一.嵌套的子查询
1.嵌套子查询只朝一个方向进行——要么返回一个而用于外部查询的值,要么返回一个与IN运算符一起使用的的值的列表。
2.嵌套子查询中,内部查询只处理一次
3.与NULL比较总会得到NULL。如果允许NULL在子查询中出现,则在与NOT IN相比较时,外部查询中的所有行都会被确定为错误的——这将返回空的列表。
2.ANY, SOME和ALL

二.相关子查询
1.执行步骤:
(1)外部查询得到一条记录并将其传入到内部查询
(2)内部查询基于传入的值执行。
(3)内部查询从其结果中把值传回到外部查询,外部查询使用这些值来完成其处理。

feixianxxx 2009-07-06
  • 打赏
  • 举报
回复
什么是子查询
1.子查询是嵌套在其他查询中的常规的T-SQL查询(用括号括起来),当需要一个SELECT语句作为数据部分的基础或另一个查询中的条件的要素时,就是创建子查询。

2.子查询满足的需求:
(1).把一个查询分解成一系列的逻辑步骤。
(2).提供一个列表作为WHERE子句和 [ IN | EXISTS | ANY | ALL] 的目标对象。
(3).提供由父查询中每一条记录驱动的查找。

一.嵌套的子查询
1.嵌套子查询只朝一个方向进行——要么返回一个而用于外部查询的值,要么返回一个与IN运算符一起使用的的值的列表。
2.嵌套子查询中,内部查询只处理一次。
3.与NULL比较总会得到NULL。如果允许NULL在子查询中出现,则在与NOT IN相比较时,外部查询中的所有行都会被确定为错误的——这将返回空的列表。
2.ANY, SOME和ALL

二.相关子查询
1.执行步骤:
(1)外部查询得到一条记录并将其传入到内部查询。
(2)内部查询基于传入的值执行。
(3)内部查询从其结果中把值传回到外部查询,外部查询使用这些值来完成其处理。

feixianxxx 2009-07-06
  • 打赏
  • 举报
回复
给你看看资料
很多SQLServer程序员对子查询(subqueries)的使用感到困惑,尤其对于嵌套子查询(即子查询中包含一个子查询)。现在,就让我们追本溯源地探究这个问题。
有两种子查询类型:标准和相关。
标准子查询执行一次,结果反馈给父查询。相关子查询每行执行一次,由父查询找回。
在本文中,我将重点讨论嵌套子查询(nestedsubqueries)(我将在以后介绍相关子查询)。
试想这个问题:你想生成一个卖平垫圈的销售人员列表。你需要的数据分散在四个表格中:人员.联系方式(Person.Contact),人力资源.员工(HumanResources.Employee),销售.销售订单标题(Sales.SalesOrderHeader),销售.销售订单详情(Sales.SalesOrderDetail)。在SQLServer中,你从内压式(outside-in)写程序,但从外压式(inside-out)开始考虑非常有帮助,即可以一次解决需要的一个语句。如果从内到外写起,可以检查Sales.SalesOrderDetail表格,在LIKE语句中匹配产品数(ProductNumber)值。你将这些行与Sales.SalesOrderHeader表格连接,从中可以获得销售人员IDs(SalesPersonIDs)。然后使用SalesPersonID连接SalesPersonID表格。最后,使用ContactID连接Person.Contact表格。
USE AdventureWorks;GOSELECTDISTINCTc.LastName,c.FirstNameFROMPerson.ContactcJOINHumanResources.EmployeeeONe.ContactID=c.ContactIDWHEREEmployeeIDIN(SELECTSalesPersonIDFROMSales.SalesOrderHeaderWHERESalesOrderIDIN(SELECTSalesOrderIDFROMSales.SalesOrderDetailWHEREProductIDIN(SELECTProductIDFROMProduction.ProductpWHEREProductNumberLIKE'FW%')));GO 这个例子揭示了有关SQLServer的几个绝妙事情。你可以发现,可以用IN()参数替代SELECT语句。在本例中,有两次应用,因此创建了一个嵌套子查询。我是标准化(normalization)的发烧友,尽管我不接受其荒谬的长度。由于标准化具有各种查询而增加了复杂性。在这些情况下子查询就显得非常有用,嵌套子查询甚至更加有用。当你需要的问题分散于很多表格中时,你必须再次将它们拼在一起,这时你可能发现嵌套子程序就很有用
叶子 2009-07-06
  • 打赏
  • 举报
回复
尽量避免使用关联子查询

http://book.csdn.net/bookfiles/795/10079523922.shtml
Zoezs 2009-07-06
  • 打赏
  • 举报
回复
这个应该相当是是子集的关系,里层的查询是外层的子集。
Zoezs 2009-07-06
  • 打赏
  • 举报
回复
这个应该相当是是子集的关系,里层的查询是外层的子集。

34,597

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧