使用SQL Server数据库嵌套子查询的方法

史志睿

史志睿

2016-02-19 11:47

在这个颜值当道,屌丝闪边的时代,拼不过颜值拼内涵,只有知识丰富才能提升一个人的内在气质和修养,所谓人丑就要多学习,今天图老师给大家分享使用SQL Server数据库嵌套子查询的方法,希望可以对大家能有小小的帮助。
很多SQL Server程序员对子查询(subqueries)的使用感到困惑,尤其对于嵌套子查询(即子查询中包含一个子查询)。现在,就让我们追本溯源地探究这个问题。 
有两种子查询类型:标准和相关。标准子查询执行一次,结果反馈给父查询。相关子查询每行执行一次,由父查询找回。在本文中,我将重点讨论嵌套子查询(nested subqueries)(我将在以后介绍相关子查询)。 
试想这个问题:你想生成一个卖平垫圈的销售人员列表。你需要的数据分散在四个表格中:人员.联系方式(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)的发烧友,尽管我不接受其荒谬的长度。由于标准化具有各种查询而增加了复杂性。在这些情况下子查询就显得非常有用,嵌套子查询甚至更加有用。 
当你需要的问题分散于很多表格中时,你必须再次将它们拼在一起,这时你可能发现嵌套子程序就很有用。
展开更多 50%)
分享

猜你喜欢

如何使用SQL Server数据库嵌套子查询

SQLServer
如何使用SQL Server数据库嵌套子查询

使用SQL Server数据库嵌套子查询的方法

编程语言 网络编程
使用SQL Server数据库嵌套子查询的方法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

SQL Server数据库的嵌套子查询

编程语言 网络编程
SQL Server数据库的嵌套子查询

优化SQL Server数据库查询方法

编程语言 网络编程
优化SQL Server数据库查询方法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

如何使用SQL Server数据库查询累计值

SQLServer
如何使用SQL Server数据库查询累计值

SQL Server2005数据库查询中使用CTE

SQLServer
SQL Server2005数据库查询中使用CTE

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

sql中返回参数的值

sql中返回参数的值

双击滚屏-常用推荐

双击滚屏-常用推荐
下拉加载更多内容 ↓