SQL - Views(视图)

SQL - Views(视图) 首页 / SQL入门教程 / SQL - Views(视图)

视图只不过是存储在数据库中且具有关联名称的SQL语句,视图实际上是以预定义的SQL查询的形式组成的临时表。

创建视图

数据库视图是使用 CREATE VIEW 语句创建的,可以从单个表,多个表或另一个视图创建视图。

基本的 CREATE VIEW 语法如下-

CREATE VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];

您可以像在普通SQL SELECT查询中使用多个表一样,在SELECT语句中包括多个表。

考虑具有以下记录的CUSTOMERS表-

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Learnfk    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

以下是从CUSTOMERS表创建视图的示例,该视图将用于在CUSTOMERS表中获得客户名称和年龄。

SQL > CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM  CUSTOMERS;

现在,您可以通过查询实际表的类似方式查询CUSTOMERS_VIEW,以下是相同的示例。

SQL > SELECT * FROM CUSTOMERS_VIEW;

这将产生以下输出。

+----------+-----+
| name     | age |
+----------+-----+
| Ramesh   |  32 |
| Khilan   |  25 |
| kaushik  |  23 |
| Chaitali |  25 |
| Hardik   |  27 |
| Komal    |  22 |
| Learnfk    |  24 |
+----------+-----+

WITH CHECK 选项

WITH CHECK OPTIONCREATE VIEW语句选项,WITH CHECK OPTION的目的是确保所有UPDATEINSERT都满足视图定义中的条件。

如果它们不满足条件,则UPDATEINSERT返回错误。

以下代码块提供了一个示例,该示例使用WITH CHECK OPTION创建相同的视图CUSTOMERS_VIEW。

CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM  CUSTOMERS
WHERE age IS NOT NULL
WITH CHECK OPTION;

在这种情况下,WITH CHECK OPTION应该拒绝在视图的AGE列中输入任何NULL值,因为视图是由在AGE列中没有NULL值的数据定义的。

更新视图

以下代码块有一个示例来更新Ramesh的年龄。

SQL > UPDATE CUSTOMERS_VIEW
   SET AGE = 35
   WHERE name = 'Ramesh';

这最终将更新基表CUSTOMERS,并且该内容将反映在视图本身中,现在,尝试查询基表,并且SELECT语句将产生以下输出。

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Learnfk    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

视图插入行

可以将数据行插入到视图中,适用于UPDATE命令的相同规则也适用于INSERT命令。

在这里,无涯教程不能在CUSTOMERS_VIEW中插入行,因为无涯教程没有在该视图中包括所有的NOT NULL列,否则,您可以以与在表中插入行类似的方式在视图中插入行。

视图删除行

可以从视图中删除数据行,适用于UPDATEINSERT命令的相同规则适用于DELETE命令。

以下是删除AGE=22的记录的示例。

SQL > DELETE FROM CUSTOMERS_VIEW
   WHERE age = 22;

最终,这将从基表CUSTOMERS中删除一行,并且该行将反映在视图本身中,现在,尝试查询基表,并且SELECT语句将产生以下输出。

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  7 | Learnfk    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

删除视图

显然,在拥有视图的地方,如果不再需要该视图,则需要一种删除该视图的方法。语法非常简单,如下所示-

DROP VIEW view_name;

以下是从CUSTOMERS表中删除CUSTOMERS_VIEW的示例。

无涯教程网

DROP VIEW CUSTOMERS_VIEW;

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

TensorFlow快速入门与实战 -〔彭靖田〕

玩转Spring全家桶 -〔丁雪丰〕

透视HTTP协议 -〔罗剑锋(Chrono)〕

性能工程高手课 -〔庄振运〕

检索技术核心20讲 -〔陈东〕

分布式数据库30讲 -〔王磊〕

Linux内核技术实战课 -〔邵亚方〕

恋爱必修课 -〔李一帆〕

徐昊 · AI 时代的软件工程 -〔徐昊〕

好记忆不如烂笔头。留下您的足迹吧 :)