数据库教程-SQL View(视图)

跨零代码为大家提供高品质的解决方案,请大家多多来访,跨零不胜感激,在此谢过。

视图无非是存储在数据库中的相关名称的SQL语句。视图实际上是一个表中的预定义的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 | Muffy    |  24 | Indore    | 10000.00 | +----+----------+-----+-----------+----------+

现在,下面的例子创建客户表的视图。这个视图将用于从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 | | Muffy    |  24 | +----------+-----+

WITH CHECK OPTION:

WITH CHECK OPTION是CREATE VIEW语句选项。WITH CHECK OPTION的目的是为了确保所有更新和插入满足视图定义的条件。

如果它没有满足条件,在UPDATE或INSERT返回一个错误。

以下是创建CUSTOMERS_VIEW 视图例子使用WITH CHECK OPTION:

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

在这种情况下,WITH CHECK OPTION拒绝任何NULL值条目在视图的AGE列,因为该视图由数据定义的不能在AGE栏中有NULL值。

更新视图:

视图在一定条件下可以更新:

  • SELECT子句不包含关键字DISTINCT。

  • SELECT子句不包含汇总函数。

  • SELECT子句不包含集合函数。

  • SELECT子句不能包含集合运算符。

  • SELECT子句不能包含一个ORDER BY子句。

  • FROM子句中不能包含多个表。

  • WHERE子句不能包含子查询。

  • 查询不包含GROUP BY或HAVING。

  • 计算列无法更新。

  • 从基表中的所有NOT NULL列必须包含在视图是为了使用INSERT查询功能。

所以,如果一个视图满足所有上述规则,那么就可以更新视图。下面是一个例子,更新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 | Muffy    |  24 | Indore    | 10000.00 | +----+----------+-----+-----------+----------+

将行插入视图:

数据行可以插入的视图。适用于UPDATE命令规则同样也适用于INSERT命令。

在这里,我们也不能插入行到CUSTOMERS_VIEW,因为我们还没有包括在该视图中的所有NOT NULL列, 否则,你可以插入数据行到视图,以其插入一个表中类似的方式。

在视图中删除行:

可以从视图中删除数据行。适用于UPDATE和INSERT命令的规则同样也适用于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 | Muffy    |  24 | Indore    | 10000.00 | +----+----------+-----+-----------+----------+

删除视图:

很显然,在这里有一个视图,需要一种方法来删除这个视图如果它不再需要。语法很简单,如下所示:

 DROP VIEW view_name;

下面是一个例子是删除CUSTOMERS客户表的视图:

 DROP VIEW CUSTOMERS_VIEW;

  

从零到一,创造未来!跨零综合IT问题解决服务站,欢迎你的到来。Oracle数据库教程 sql教程 只为你绽放。

本文固定链接: http://kua0.com/2019/01/24/数据库教程-sql-view视图/

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注