Oracle视图

Oracle视图

本节介绍Oracle视图,视图是Oracle数据库中的一个重要组件。

Oracle视图教程列表按照下面的教程了解更多关于Oracle视图:

创建视图 - 使用CREATE VIEW语句创建一个新的视图。删除视图 - 使用DROP VIEW语句从数据库中删除视图。可更新的视图 - 讨论如何创建可更新的视图。内联视图 - 了解如何使用内联视图来简化复杂的查询并将几个单独的查询压缩为一个查询。WITH CHECK OPTION - 如何使用CREATE VIEW命令的WITH CHECK OPTION子句保护视图。

Oracle视图介绍查询的结果是派生表,如以下示例所示:

SELECT

name,

credit_limit

FROM

customers;

执行上面查询语句,得到以下结果 -

派生表由包含许多行的名称和贷记限额(credit_limit)列组成。它仅包含Customers表中的部分数据。

如果给这个查询一个名字,那么就是一个视图。 这就是为什么有时将视图被称为命名查询。

因此,根据定义,视图是一个“虚拟”表,其数据是存储查询的结果,每次查询视图时都会导出该查询。

视图是一个虚拟表,因为您可以在SQL查询中像使用表一样使用它。 每个视图都有数据类型的列,因此可以使用INSERT,UPDATE,DELETE和MERGE语句对视图执行查询或管理其内容(有一些限制)。

与表不同,视图不会存储任何数据。 准确地说,一个视图只是行为与表相似。 这只是一个存储在数据库中的命名查询。从视图中查询数据时,Oracle使用此存储的查询从基础表中检索数据。

假设将查询分配给名为customer_credits的名称作为一个视图,那么从该视图查询数据,如下:

SELECT

*

FROM

customer_credits;

在后端,Oracle查找与名称customer_credits关联的存储查询并执行以下查询:

SELECT

*

FROM

(

SELECT

name,

credit_limit

FROM

customers

);

在这个例子中,customers表被称为基表。 此外,定义视图的查询称为定义查询。

从customer_credits视图返回的结果集取决于基础表(此示例中是customers表)的数据。 customer_credits视图也取决于customers表的结构。 如果重命名或删除查询引用的某个列(如name或credit_limit),则视图 - customer_credits将不再起作用。

何时使用Oracle视图在很多情况下,可以将视图用于不同的目的。最常见的用法如下:

简化数据检索。保持逻辑数据独立性。实施数据安全。

1. 简化数据检索

视图有助于显着简化数据检索。 首先,构建一个复杂的查询,仔细测试,并将查询封装在视图中。 然后,可以通过视图访问基础表的数据,而不是一遍又一遍地重写整个查询。

以下查询按年份返回客户的销售金额:

SELECT

name AS customer,

SUM( quantity * unit_price ) sales_amount,

EXTRACT(

YEAR

FROM

order_date

) YEAR

FROM

orders

INNER JOIN order_items

USING(order_id)

INNER JOIN customers

USING(customer_id)

WHERE

status = 'Shipped'

GROUP BY

name,

EXTRACT(

YEAR

FROM

order_date

);

执行上面查询语句,得到以下结果 -

这个查询是相当复杂的。 一遍又一遍地输入是耗时的,可能会导致错误。 为了简化它,可以创建一个基于这个查询的视图:

CREATE OR REPLACE VIEW customer_sales AS

SELECT

name AS customer,

SUM( quantity * unit_price ) sales_amount,

EXTRACT(

YEAR

FROM

order_date

) YEAR

FROM

orders

INNER JOIN order_items

USING(order_id)

INNER JOIN customers

USING(customer_id)

WHERE

status = 'Shipped'

GROUP BY

name,

EXTRACT(

YEAR

FROM

order_date

);

通过添加以下子句:

CREATE OR REPLACE VIEW customer_sales AS

在查询之前,您将创建customer_sales视图。 请注意,您将在下一个教程中学习如何创建视图。

现在,可以通过更简单的查询2017年获取客户的销售情况:

SELECT

customer,

sales_amount

FROM

customer_sales

WHERE

YEAR = 2017

ORDER BY

sales_amount DESC;

执行上面查询语句,得到以下结果 -

2. 保持逻辑数据独立性

可以通过视图将基础表中的数据公开到外部应用程序。每当基表的结构发生变化时,只需要更新视图。数据库和外部应用程序之间的接口保持不变。这样的好处在于,您不必更改一行代码即可保持外部应用程序的正常运行。

例如,某些报告系统可能只需要客户销售数据来撰写战略报告。 因此,您可以为应用程序所有者提供customer_sales视图。

3. 实施数据安全

视图可用来实现一个额外的安全层。 它们可以帮助您隐藏底层表中的某些列和行,并仅向适当的用户显示所需的数据。

Oracle在视图上为您提供GRANT和REVOKE命令,以便您可以指定用户可以针对该视图执行哪些操作。 请注意,在这种情况下,不会授予对基础表的任何权限,因为可能不希望用户绕过视图来直接访问基表。

上一篇:

Oracle触发器

下一篇:无

相关阅读

发了情的泰迪怎么处理
365bet官方投注网址

发了情的泰迪怎么处理

🕒 08-05 👁️‍🗨️ 9243
数据流量是什么
久发365电子游戏网址多少

数据流量是什么

🕒 07-21 👁️‍🗨️ 3002
绦纶纤维的区别及用途
365bet官网赌场

绦纶纤维的区别及用途

🕒 08-13 👁️‍🗨️ 8701
以爱为名,为“艾”发声 ——数说中国艾滋病十五年
久发365电子游戏网址多少

以爱为名,为“艾”发声 ——数说中国艾滋病十五年

🕒 11-08 👁️‍🗨️ 1024
iPhone12突然屏幕不能点,关机也关不了
365bet官方投注网址

iPhone12突然屏幕不能点,关机也关不了

🕒 07-12 👁️‍🗨️ 9944
SPZ是什么意思
久发365电子游戏网址多少

SPZ是什么意思

🕒 09-27 👁️‍🗨️ 9608
文件二维码制作教程
久发365电子游戏网址多少

文件二维码制作教程

🕒 07-25 👁️‍🗨️ 8596
WiFi共享精灵的使用说明
久发365电子游戏网址多少

WiFi共享精灵的使用说明

🕒 11-28 👁️‍🗨️ 524
中国哪里的“鸡”最好吃?网友评选出4大“名鸡”,看你吃过吗?