专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »数据库 » sqlserver数据库:使用SQL Server数据库嵌套子查询的思路方法 »正文

sqlserver数据库:使用SQL Server数据库嵌套子查询的思路方法

来源: 发布时间:星期日, 2009年9月6日 浏览:65次 评论:0
很多SQL Server员对子查询(subqueries)使用感到困惑尤其对于嵌套子查询(即子查询中包含个子查询)现在就让我们追本溯源地探究这个问题
有两种子查询类型:标准和相关标准子查询执行结果反馈给父查询相关子查询每行执行由父查询找回在本文中我将重点讨论嵌套子查询(nested subqueries)(我将在以后介绍相关子查询)
试想这个问题:你想生成个卖平垫圈销售人员列表你需要数据分散在 4个表格中:人员.联系方式(Person.Contact)人力资源.员工(HumanResources.Employee)销售.销售订单标题(Sales.SalesOrderHeader)销售.销售订单详情(Sales.SalesOrderDetail)在SQL Server中你从内压式(outside-in)写但从外压式(inside-out)开始考虑非常有帮助即可以次解决需要个语句
如果从内到外写起可以检查Sales.SalesOrderDetail表格在LIKE语句中匹配产品数(ProductNumber)值你将这些行和Sales.SalesOrderHeader表格连接从中可以获得销售人员IDs(SalesPersonIDs)然后使用SalesPersonID连接SalesPersonID表格最后使用ContactID连接Person.Contact表格
复制代码 代码如下:

USE AdventureWorks ;
GO
SELECT DISTINCT c.LastName, c.FirstName
FROM Person.Contact c JOIN HumanResources.Employee e
ON e.ContactID = c.ContactID WHERE EmployeeID IN
(SELECT SalesPersonID
FROM Sales.SalesOrderHeader
WHERE SalesOrderID IN
(SELECT SalesOrderID
FROM Sales.SalesOrderDetail
WHERE ProductID IN
(SELECT ProductID
FROM Production.Product p
WHERE ProductNumber LIKE'FW%')));
GO


这个例子揭示了有关SQL Server几个绝妙事情你可以发现可以用IN参数替代SELECT 语句在本例中有两次应用因此创建了个嵌套子查询
我是标准化(normalization)发烧友尽管我不接受其荒谬长度由于标准化具有各种查询而增加了复杂性在这些情况下子查询就显得非常有用嵌套子查询甚至更加有用
当你需要问题分散于很多表格中时你必须再次将它们拼在这时你可能发现嵌套子就很有用
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: