四时宝库

程序员的知识宝库

SQLSERVER:视图(sqlserver视图增加字段)

什么是视图?

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

视图的优点

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

实例数据表

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

Employees 表

EmployeeID

FirstName

LastName

Position

DepartmentID

1

John

Doe

Manager

1

2

Jane

Smith

Developer

2

3

Emily

Clark

Designer

2

Departments 表

DepartmentID

DepartmentName

1

Human Resources

2

Engineering

脚本与数据

-- 创建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:创建视图

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

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 视图。

SELECT *
FROM vw_EmployeeDetails;

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

EmployeeID

FullName

DepartmentName

1

John Doe

Human Resources

2

Jane Smith

Engineering

3

Emily Clark

Engineering

示例脚本 3:更新视图

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

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:使用视图进行更新

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

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

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

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

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

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

查询这个视图:

SELECT *
FROM vw_DepartmentEmployeeCount;

结果可能如下:

DepartmentName

EmployeeCount

Human Resources

1

Engineering

2

视图的注意事项

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

总结

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

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接