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

z15933683444

z15933683444

2016-01-29 15:46

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

很多SQL Server程序员对子查询(subqueries)的使用感到困惑,尤其对于嵌套子查询(即子查询中包含一个子查询)。现在,就让我们追本溯源地探究这个问题。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/sqlserver/)

有两种子查询类型:标准和相关。标准子查询执行一次,结果反馈给父查询。相关子查询每行执行一次,由父查询找回。在本文中,我将重点讨论嵌套子查询(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表格。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/sqlserver/)

USE AdventureWorks ;GOSELECT DISTINCT c.LastName, c.FirstName FROM Person.Contact c JOIN HumanResources.Employee eON e.ContactID = c.ContactID WHERE EmployeeID IN (SELECT SalesPersonID FROM Sales.SalesOrderHeaderWHERE SalesOrderID IN (SELECT SalesOrderID FROM Sales.SalesOrderDetailWHERE 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数据库查询累计值

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

lol偷钱流符文搭配推荐

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

SQL Server2005数据库查询中使用CTE

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

使用SQL Server 2005 FOR XML嵌套查询

编程语言 网络编程
使用SQL Server 2005 FOR XML嵌套查询

lolAD刺客新符文搭配推荐

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

轻松用PS教你打造效果美到爆的光照效果

轻松用PS教你打造效果美到爆的光照效果

教你在SQL Server中由原子建立分子查询

教你在SQL Server中由原子建立分子查询
下拉加载更多内容 ↓