SQL视图怎么创建和使用?

文章导读
上一个 测验 下一个 SQL 中的视图就像虚拟表,它们本身不存储数据,而是充当可重用的保存的 SQL 查询。我们可以将视图视为查询结果的快照。视图为我们提供了一种简化的方式来查看或交互数据。
📋 目录
  1. A 什么是 SQL 视图?
  2. B 在 SQL 中创建视图
  3. C 使用视图更新数据
  4. D SQL 中的视图类型
  5. E 删除视图
  6. F 使用视图的优缺点
  7. G 结论
A A

DBMS - SQL 中的视图



上一个
测验
下一个

SQL 中的视图就像虚拟表,它们本身不存储数据,而是充当可重用的保存的 SQL 查询。我们可以将视图视为查询结果的快照。视图为我们提供了一种简化的方式来查看或交互数据。

视图在提高查询可读性方面非常有用。它们还可以用于限制对敏感数据的访问,或将多个表的数据组合成单个视图。在本章中,我们将使用一系列示例来演示视图是什么、它们的类型,以及如何在实际应用中有效使用它们。

什么是 SQL 视图?

视图是存储在数据库中的预定义 SQL 查询。它像一个虚拟表一样工作,每当底层数据发生变化时都会自动更新。我们可以使用视图来 −

  • 简化复杂查询
  • 为不同用户创建定制化的视图
  • 限制对特定列或行的访问

示例表和数据

在本章的示例中,我们将使用以下一组表来演示在 SQL 中使用视图的实际应用 −

以下是Customers 表

customer_id first_name last_name email phone
1 Antara Joshi antara.j@example.com 123-456-7890
2 Bimal Saha bimal.saha@example.com 234-567-8901
3 Chandan Tudu chandan.tudu@example.com 345-678-9012

这是Products 表

product_id product_name category price stock_quantity
101 Laptop Electronics 1000.00 10
102 Smartphone Electronics 800.00 20
103 Office Chair Furniture 150.00 5

Orders 表如下 −

order_id customer_id product_id quantity order_date
1 1 101 1 2023-11-01 10:00:00
2 2 103 2 2023-11-02 12:30:00
3 3 102 1 2023-11-03 15:45:00
4 1 103 1 2023-11-04 14:00:00

在 SQL 中创建视图

要使用视图,我们必须了解如何从现有表创建视图。我们可以使用 CREATE VIEW 语句来创建视图。创建视图后,我们可以像查询表一样查询它。

示例:客户订单视图

让我们创建一个视图来显示客户姓名以及他们订购的产品。

CREATE VIEW CustomerOrders AS
SELECT c.first_name, c.last_name, p.product_name, o.quantity, o.order_date
FROM Orders o
JOIN Customers c ON o.customer_id = c.customer_id
JOIN Products p ON o.product_id = p.product_id;

使用以下查询从CustomerOrders视图中获取所有记录 −

SELECT * FROM CustomerOrders;

它将从视图中获取所有记录 −

first_name last_name product_name quantity order_date
Antara Joshi Laptop 1 2023-11-01 10:00:00
Bimal Saha Office Chair 2 2023-11-02 12:30:00
Chandan Tudu Smartphone 1 2023-11-03 15:45:00
Antara Joshi Office Chair 1 2023-11-04 14:00:00

这个视图组合了三个表的数据,使得获取客户订单更加容易。

使用视图更新数据

某些视图允许更新,但这取决于视图的复杂性和数据库约束。

示例:通过简单视图更新

让我们创建一个视图来显示产品库存水平。

CREATE VIEW ProductStock AS
SELECT product_id, product_name, stock_quantity
FROM Products;

使用以下查询从 ProductStock 视图中获取详细信息 −

SELECT * FROM ProductStock;

它将从 ProductStock 视图中获取记录 −

product_id product_name stock_quantity
101 Laptop 10
102 Smartphone 20
103 Office Chair 5

通过视图更新库存数量

现在使用以下查询更新 ProductStock 视图 −

UPDATE ProductStock
SET stock_quantity = stock_quantity - 1
WHERE product_id = 101;

再次查询 ProductStock 视图

SELECT * FROM ProductStock;

它将从 ProductStock 视图中获取更新后的数据 −

product_id product_name stock_quantity
101 Laptop 9
102 Smartphone 20
103 Office Chair 5

在这里,我们可以看到更新也反映在底层的 Products 表中。

SQL 中的视图类型

SQL 视图可以分为两种主要类型 −

  • 简单视图
  • 复杂视图

让我们从简单视图的简单示例开始。

简单视图

简单视图基于单个表。如果不使用计算或聚合函数,简单视图允许数据更新。

示例:客户的简单视图

在此查询中,我们从 Customers 表创建一个简单视图 −

CREATE VIEW CustomerDetails AS
SELECT first_name, last_name, email
FROM Customers;

复杂视图

复杂视图组合多个表的数据或包含计算。它们也可以是聚合函数或 GROUP BY 子句。复杂视图通常不允许更新。

示例:总收入的复杂视图

让我们创建一个视图来计算每个产品的总收入 −

CREATE VIEW ProductRevenue AS
SELECT p.product_name, SUM(o.quantity * p.price) AS total_revenue
FROM Orders o
JOIN Products p ON o.product_id = p.product_id
GROUP BY p.product_name;

使用以下查询从 ProductRevenue 视图中获取数据 −

SELECT * FROM ProductRevenue;

这个复杂视图获取每个产品生成的收入 −

product_name total_revenue
Laptop 1000.00
Smartphone 800.00
Office Chair 450.00

删除视图

就像我们删除表一样,我们也可以删除视图。如果不再需要视图,可以使用 DROP VIEW 语句删除它。

示例:删除视图

使用以下查询删除 ProductStock 视图 −

DROP VIEW ProductStock;

它会删除 ProductStock 视图,但不会影响底层的 Products 表。

使用视图的优缺点

下表突出了在 SQL 查询中使用 视图 的优缺点 −

优点 缺点

简化复杂查询 − 我们可以将复杂的查询保存为视图并轻松重用。

限制数据访问 − 视图可以限制某些用户可以看到的列或行。

促进可重用性 − 一旦创建视图,它可以用于多个查询。

提高可读性 − 引用视图的查询通常更容易阅读和理解。

性能开销 − 复杂视图可能会降低性能,因为每次访问视图时都会执行查询。

更新受限 − 并非所有视图都允许数据更新。

依赖问题 − 删除或修改底层表可能会破坏视图。

结论

SQL 中的 Views 有助于简化查询并使数据管理更加容易。在本章中,我们详细介绍了如何在 SQL 中使用 views。我们了解了如何创建简单和复杂的 views、如何从 views 中查询数据,甚至如何通过 views 更新数据。使用 views,我们可以提高 SQL 查询的可读性,并应用安全性和可重用性功能。