2025-11-05
SQLSERVER
00

目录

什么是视图?
视图的优点
实例数据表
Employees 表
Departments 表
示例脚本 1:创建视图
示例脚本 2:查询视图
示例脚本 3:更新视图
示例脚本 4:使用视图进行更新
示例脚本 5:带有聚合函数的视图
视图的注意事项
总结

什么是视图?

在 SQL Server 中,视图是基于 SQL 查询的虚拟表。它们不存储数据本身,而是保存了一个 SQL 查询,这个查询作为视图的定义。当你访问视图时,SQL Server 动态地执行这个查询并返回结果。视图可以包含来自一个或多个表的数据,可以用于简化复杂的 SQL 查询、保护数据以及确保数据的一致性。

视图的优点

  • 安全性:视图可以限制对基础数据的访问,只展示必要的信息。
  • 简化复杂查询:将复杂的查询封装在视图中,用户可以像使用表一样使用视图。
  • 逻辑数据独立性:视图可以为基础表结构的变化提供一层抽象。

实例数据表

假设我们有以下两个数据表:

Employees 表

EmployeeIDFirstNameLastNamePositionDepartmentID
1JohnDoeManager1
2JaneSmithDeveloper2
3EmilyClarkDesigner2

Departments 表

DepartmentIDDepartmentName
1Human Resources
2Engineering

脚本与数据

SQL
-- 创建Departments表 CREATE TABLE Departments ( DepartmentID INT PRIMARY KEY, DepartmentName VARCHAR(100) ); -- 插入Departments表数据 INSERT INTO Departments (DepartmentID, DepartmentName) VALUES (1, 'Human Resources'), (2, 'Engineering'); -- 创建Employees表 CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY, FirstName VARCHAR(100), LastName VARCHAR(100), Position VARCHAR(100), DepartmentID INT, FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID) ); -- 插入Employees表数据 INSERT INTO Employees (EmployeeID, FirstName, LastName, Position, DepartmentID) VALUES (1, 'John', 'Doe', 'Manager', 1), (2, 'Jane', 'Smith', 'Developer', 2), (3, 'Emily', 'Clark', 'Designer', 2);

示例脚本 1:创建视图

创建一个视图,它展示了员工的全名和他们所在的部门名称。

SQL
CREATE VIEW vw_EmployeeDetails AS SELECT e.EmployeeID, (e.FirstName + ' ' + e.LastName) AS FullName, d.DepartmentName FROM Employees e JOIN Departments d ON e.DepartmentID = d.DepartmentID; GO

示例脚本 2:查询视图

查询刚刚创建的 vw_EmployeeDetails 视图。

SQL
SELECT * FROM vw_EmployeeDetails;

这个查询将返回如下结果:

EmployeeIDFullNameDepartmentName
1John DoeHuman Resources
2Jane SmithEngineering
3Emily ClarkEngineering

image.png

示例脚本 3:更新视图

更新视图以添加额外的列,例如员工的职位。

SQL
ALTER VIEW vw_EmployeeDetails AS SELECT e.EmployeeID, (e.FirstName + ' ' + e.LastName) AS FullName, e.Position, d.DepartmentName FROM Employees e JOIN Departments d ON e.DepartmentID = d.DepartmentID; GO

示例脚本 4:使用视图进行更新

虽然视图本身不存储数据,但在某些情况下,你可以通过视图更新基础表的数据。这通常需要视图是可更新的,即它必须满足一定的条件。

SQL
UPDATE vw_EmployeeDetails SET Position = 'Senior Developer' WHERE EmployeeID = 2;

这将更新 Employees 表中 EmployeeID 为 2 的记录,将其职位改为 'Senior Developer'。

示例脚本 5:带有聚合函数的视图

创建一个视图,它展示了每个部门的员工数量。

SQL
CREATE VIEW vw_DepartmentEmployeeCount AS SELECT d.DepartmentName, COUNT(e.EmployeeID) AS EmployeeCount FROM Departments d LEFT JOIN Employees e ON d.DepartmentID = e.DepartmentID GROUP BY d.DepartmentName; GO

查询这个视图:

SQL
SELECT * FROM vw_DepartmentEmployeeCount;

结果可能如下:

DepartmentNameEmployeeCount
Human Resources1
Engineering2

image.png

视图的注意事项

  • 视图不能存储数据,它们只是查询的结果。
  • 更新视图可能会影响基础表,但并非所有的视图都是可更新的。
  • 视图可能会降低性能,因为每次访问视图时,SQL Server 都需要执行视图定义中的查询。

总结

视图是 SQL Server 中一个强大的特性,它可以帮助管理复杂的查询、提升安全性和数据抽象。合理使用视图可以大大提升数据库的可维护性和可用性。在设计视图时,要确保它们的逻辑清晰且性能高效,以便用户可以像使用普通表一样轻松地使用它们。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!