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

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

现在,就让我们追本溯源地探究这个问题。 有两种子查询类型:标准和相关。标准子查询执行一次,结果反馈给父查询。相关子查询每行执行一次,由父查询找回。在本文中,我将重点讨论嵌套子查询(nested subqueries)(我将在以后介绍相关子查询)。 试想这个问题:你想生成一个卖平垫圈的销售人员列表。你需要的数据分散在四个表格中:人员****(PersonContact),人力资源员工(HumanResourcesEmployee),销售销售订单标题(SalesSalesOrderHeader),销售销售订单详情(SalesSalesOrderDetail)。在SQL Server中,你从内压式(outside-in)写程序,但从外压式(inside-out)开始考虑非常有帮助,即可以一次解决需要的一个语句。 如果从内到外写起,可以检查SalesSalesOrderDetail表格,在LIKE语句中匹配产品数(ProductNumber)值。你将这些行与SalesSalesOrderHeader表格连接,从中可以获得销售人员IDs(SalesPersonIDs)。然后使用SalesPersonID连接SalesPersonID表格。最后,使用ContactID连接PersonContact表格。 USE AdventureWorks ; GO SELECT DISTINCT cLastName, cFirstName FROM PersonContact c JOIN HumanResourcesEmployee e ON eContactID = cContactID WHERE EmployeeID IN (SELECT SalesPersonID FROM SalesSalesOrderHeader WHERE SalesOrderID IN (SELECT SalesOrderID FROM SalesSalesOrderDetail WHERE ProductID IN (SELECT ProductID FROM ProductionProduct p WHERE ProductNumber LIKE'FW%'))); GO 这个例子揭示了有关SQL Server的几个绝妙事情。你可以发现,可以用IN()参数替代SELECT 语句。在本例中,有两次应用,因此创建了一个嵌套子查询。 我是标准化(normalization)的发烧友,尽管我不接受其荒谬的长度。由于标准化具有各种查询而增加了复杂性。在这些情况下子查询就显得非常有用,嵌套子查询甚至更加有用。 当你需要的问题分散于很多表格中时,你必须再次将它们拼在一起,这时你可能发现嵌套子程序就很有用。

嵌套就是类似IN语句,比如select

from

table1

where

id

in

(select

id

from

table2),连接就是用JOIN把2表根据一个字段进行数据连接,区别就是连接查询效率比嵌套高,而且JOIN可以通过改变JOIN先后顺序,先扫描记录少的表,从而提高速度,如果嵌套会固定先搜索子查询

例如 表数据有两列A,B ,存在重复情况,那么可以

select A,B,COUNT() FROM table t group by A,B

其中COUNT() 的结果是重复条数,为1表示不重复。

多表查询类似

你得把你的子查询起个别名才好啦

SELECT     fcode, fname, suoshu, suoshuname, zcode, zname, peitao, sunhao

FROM         

(SELECT DISTINCT TOP (100) PERCENT t0fcode as fcode, t1gname as fname, '' as suoshu, '' as suoshuname, '' as zcode, '' as zname, 0 as peitao, 0 as sunhao

                       FROM          bom t0 INNER JOIN

                                              goodsmess t1  on    t0fcode = t1gcode

                       UNION ALL

                       SELECT     t0fcode, '', t0zcode, t3cname, '', '', t0peitao, 0

                       FROM         bom t0 INNER JOIN

                                             bumen t3 ON t0zcode = t3ccode

                       WHERE     t0zleixing = 0

                       UNION ALL

                       SELECT     t0fcode, '', t0suoshu, '', t0zcode, t4gname, t0peitao, t0shunhao

                       FROM         bom t0 INNER JOIN

                                             goodsmess t4 ON t0zcode = t4gcode

                       WHERE     t0zleixing = 1) t

order by fcode,suoshu,zcode

看见了没,就是最后那个右括号外边加了个t

select a from user_info a,waitforpass b where apassuserid =bpassuserid and bhavepass=1

这样只会查出来 237 238 239 240

以上就是关于如何使用SQL Server数据库嵌套子查询全部的内容,包括:如何使用SQL Server数据库嵌套子查询、数据库的SQL语句中,嵌套查询和连接查询有什么区别,说的详细的、sql 嵌套查询等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9875599.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存