一.视图概述
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。
二.创建视图——CREATE VIEW
1. 语法
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW [db_name.]view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
通 过该语句可以创建视图,若给定了[OR REPLACE],则表示当已具有同名的视图时,将覆盖原视图。select_statement是一个查询语句,这个查询语句可从表或其它的视图中查 询。视图属于数据库,因此需要指定数据库的名称,若未指定时,表示在当前的数据库创建新视图。
表和数据库共享数据库中相同的名称空间,因此,数据库不能包含相同名称的表和视图,并且,视图的列名也不能重复。
2. 使用举例
Eg. 本例创建一个产品表(product)和一个购买记录表(purchase),再通过视图purchase_detail查询出购买的详细信息。
CREATE TABLE product
(
product_id INT NOT NULL,
name VARCHAR(50) NOT NULL,
price DOUBLE NOT NULL
);
INSERT INTO product VALUES(1, 'apple ', 5.5);
CREATE TABLE purchase
(
id INT NOT NULL,
product_id INT NOT NULL,
qty INT NOT NULL DEFAULT 0,
gen_time DATETIME NOT NULL
);
INSERT INTO purchase VALUES(1, 1, 10, NOW());
CREATE VIEW purchase_detail AS SELECT product.name as name, product .price as price, purchase.qty as qty, product .price * purchase.qty as total_value from product, purchase where product.product_id = purchase.product_id;
创建成功后,输入:SELECT * FROM purchase_detail;
运行效果如下:
+-------+-------+-----+-------------+
| name | price | qty | total_value |
+-------+-------+-----+-------------+
| apple | 5.5 | 10 | 55 |
+-------+-------+-----+-------------+
1 row in set (0.01 sec)
3. 注意事项
创建视图存在如下注意事项:
(1) 运行创建视图的语句需要用户具有创建视图(CRATE VIEW)的权限,若加了[OR REPLACE]时,还需要用户具有删除视图(DROP VIEW)的权限;
(2)SELECT语句不能包含FROM子句中的子查询;
(3)SELECT语句不能引用系统或用户变量;
(4)SELECT语句不能引用预处理语句参数;
(5)在存储子程序内,定义不能引用子程序参数或局部变量;
(6)在定义中引用的表或视图必须存在。但是,创建了视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用CHECK TABLE语句;
(7)在定义中不能引用TEMPORARY表,不能创建TEMPORARY视图;
(8)在视图定义中命名的表必须已存在;
(9)不能将触发程序与视图关联在一起;
(10) 在视图定义中允许使用ORDER BY,但是,如果从特定视图进行了选择,而该视图使用了具有自己ORDER BY的语句,它将被忽略。
三.修改视图——ALTER VIEW
1. 语法
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
该语句用于更改已有视图的定义。其语法与CREATE VIEW类似。
2. 使用举例
Eg. 将上一小节中中创建的视purchase_detail进行修改,去掉qty列,语句如下:
ALTER VIEW purchase_detail AS SELECT product.name as name, product .price as price, product .price * purchase.qty as total_value from product, purchase where product.product_id = purchase.product_id;
此时通过语句:select * from purchase_detail;对视图进行查询时,结果如下:
+-------+-------+-------------+
| name | price | total_value |
+-------+-------+-------------+
| apple | 5.5 | 55 |
+-------+-------+-------------+
3. 注意事项
修改视图的注意事项除了第一条外跟创建视图的注意事项是一样的。第(1)条应改为:
该语句需要具有针对视图的CREATE VIEW和DROP权限,也需要针对SELECT语句中引用的每一列的某些权限。
四. 删除视图——DROP VIEW
1. 语法
DROP VIEW [IF EXISTS]
view_name [, view_name] ...
[RESTRICT | CASCADE]
该语句用户删除视图,可一次删除多个视图。[IF EXISTS]选项确保语句正确运行。若没有该子句,当指定的视图不存在时,将发生错误。
2. 使用举例
Eg1. 删除在前面的小节中创建的视图purchase_detail:DROP VIEW purchase_detail;
Eg2. 删除一个未知的视图:DROP VIEW IF EXISTS test_view;
Eg3. 删除多个视图:DROP VIEW IF EXISTS test_view1, test_view2;
3. 注意事项
必须对要删除的一个或多个视图拥有DROP VIEW的权限。
相关推荐
在视图创建完成后,开发者可能展示了如何使用视图进行数据保存。这通常意味着通过INSERT INTO语句向视图添加数据。由于视图是只读的,不能直接修改,所以插入数据实际上是在操作底层的基表。VB中,可以通过Command...
对话框使用视图控制
本篇将详细阐述如何在对话框中使用视图,以及这两个组件的基本性质。 首先,让我们理解什么是对话框。对话框是一种特殊的窗口,用于与用户交互,通常包含各种控件,如按钮、文本框等,以收集信息或显示设置。在VC++...
在 Web 环境中使用视图,可以使 Lotus Domino 应用程序更加用户友好且功能丰富。本章将深入探讨如何在 Web 上有效地利用视图。 18.1 关于视图 视图是 Lotus Domino 数据库的核心组件之一,它提供了一种结构化的数据...
本学习任务书旨在教授如何在实际操作中创建和使用视图,以提升数据管理与维护的能力。以下是关于创建和使用视图的详细说明: 一、视图的概念 视图是基于一个或多个表的查询结果,它不存储实际数据,而是提供了一个...
2. **视图查询**:Nutz的DAO接口提供了执行SQL查询的方法,如`select(String sql)`,可以直接使用视图名称作为SQL查询,获取合并后的数据。 3. **Nutz ORM与视图**:如果项目中使用了Nutz的ORM特性,视图可以被映射...
视图和索引可以结合使用,例如可以使用视图 V_IS 和索引 i_sdept_sno 查询信息系学生基本情况: SELECT * FROM V_IS WHERE sno = '5'; 本实验报告总结了视图和索引的创建、修改、使用等知识点,并结合实验步骤和...
### 数据库视图和索引的创建与使用详解 ...通过本实验的学习,我们不仅掌握了如何创建和使用视图与索引,更重要的是理解了它们在数据库管理中的价值,为今后深入研究和实际应用奠定了坚实的基础。
实验的目的在于让学生通过创建和使用视图来理解其概念和价值,并掌握视图的基本操作,包括查询、删除、更新和插入。实验中,学生将学习如何通过单个表或多个表建立视图,以及如何利用视图进行数据操作。 视图的创建...
本实验涵盖了 Oracle 中的视图概念、创建视图、显示视图的内容、从数据字典视图中选择视图的名字和文本、使用视图查询数据、创建带有条件的视图、显示视图的结构和内容、更新视图、创建复杂视图等内容,为读者提供了...
### 数据库视图的创建和使用 #### 一、数据库视图的概念与作用 数据库视图(View)是关系数据库中的一种重要抽象概念,它基于一个或多张表,...合理地设计和使用视图对于提高数据库系统的灵活性和效率具有重要意义。
在实验过程中,学生需要完成一系列的任务,例如根据指定条件查询数据,创建和使用视图,以及使用SQL语句进行复杂查询。例如,查询所有亚洲球队的参赛成绩,或者统计各地区球队的夺冠次数,这都需要对数据库的结构有...
总结来说,理解和熟练使用视图控制对象对于iOS开发者至关重要。视图对象负责UI的呈现,而视图控制器负责管理和协调这些视图,以及处理用户的交互。掌握它们的区别和用法,能够帮助我们构建出高效、流畅的用户界面。...
数据库实验5:视图的使用 视图是数据库管理系统中的一种虚拟表,它不存储实际数据,而是根据定义的查询结果动态生成的。视图的使用可以简化复杂的查询操作,提高查询效率,并且可以隐藏底层表的结构,从而提高数据...
使用视图进行查询就像查询普通表一样,只需在SELECT语句中引用视图名即可。更新和删除操作也可以针对视图进行,但有以下限制: - **只读视图**:如果视图基于不可更新的查询(如聚合、分组、子查询等),则不能执行...
1. **使用视图设计器创建视图**:这是一种图形化界面操作方式,通过企业管理器中的视图设计器,用户可以直观地设计视图结构,包括选择源表、字段以及设置过滤条件等。 2. **使用企业管理器的创建视图向导**:这是一...
- 性能影响:虽然视图提供了方便,但过度使用视图可能会增加查询的复杂性和数据库的负担。在设计时,需要权衡视图带来的便利和潜在的性能问题。 总之,Oracle的视图是数据库设计中的强大工具,它提供了数据抽象、...
创建一个名为 v_sc 的视图,包括学号、姓名、课程编号、课程名、成绩,并使用视图输出上述信息。 Create View v_sc As Select sc.sno, sname, sc.cno, cname, score From s, c, sc Where sc.sno = s.sno And sc.cno...
6. **使用视图** 创建完视图后,我们可以通过`SELECT`语句来查询视图中的数据,就像查询普通表一样: ```sql SELECT * FROM DepartmentAverageSalary; ``` 7. **修改和删除视图** 若要修改已有的视图,可以...
### VF视图与查询知识点...通过上述步骤,我们不仅了解了如何在VF中创建和使用视图,还学习了如何通过视图和查询来高效地管理和分析数据。这些技术对于处理复杂的数据集非常有用,能够帮助开发人员快速获取所需的信息。