gpt4 book ai didi

sql - 如何针对分层表创建 View

转载 作者:行者123 更新时间:2023-12-04 21:39:20 25 4
gpt4 key购买 nike

我正在学习如何使用 SQL Server 创建 View 。我正在尝试在 Northwind 数据库中添加一个名为 Managers 的 View ,该 View 仅显示监督其他员工的员工。这是我目前所拥有的。

Create View Manager_vw
As
Select LastName,
FirstName,
EmployeeID
From Employees
Where

我坚持的是如何以及我将如何监督其他员工。我不确定该怎么做。如果有人可以帮助我了解如何执行此操作。

最佳答案

在 northwind.dbo.employees 中,您可以通过查看 reportsto 列找到监督其他员工的员工。基本上,您想要返回其 ID 在另一行的 reportsto 列中的员工。可以这样做:

SELECT LastName,
FirstName,
EmployeeID
FROM employees E
WHERE EXISTS(SELECT * FROM Employees WHERE reportsTo = E.EmployeeID)

EXISTS 类似于 JOIN 但通常实现为“半连接”,它将在找到单个匹配项后停止处理(而不是找到所有下属员工需要额外的工作)因为它不返回任何额外的记录,你也节省了消除重复的额外步骤的成本(JOIN 会做更多的工作来处理连接,并且通过执行 DISTINCT 来撤消不需要的工作,甚至需要做更多的工作。)

您会注意到我在子查询中引用了 E.EmployeeID,这将子查询与外部查询相关联,这称为关联子查询。

请注意: View 在数据库中占有一席之地,但很容易被滥用。当工程师从 OO 背景接触到数据库时, View 似乎是促进代码继承和可重用性的便捷方式。通常人们最终会发现自己处于一个位置,他们将嵌套 View 连接到嵌套 View 的嵌套 View 。 SQL 处理嵌套 View 本质上是通过获取每个单独 View 的定义并将其扩展为一个会让您的 DBA 哭泣的查询的野兽。

此外,您在示例中遵循了出色的做法,我鼓励您继续这样做。您单独指定了所有列,永远不要使用 SELECT * 来指定 View 的结果。它最终会毁了你的一天。你会看到我的 EXISTS 子句中确实有一个 SELECT *EXISTS 不返回结果集,优化器将忽略它具体案例。

关于sql - 如何针对分层表创建 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8002390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com