SQL基础教程(第2版)第5章 复杂查询:5-1 视图和表

本章将以此前学过的SELECT语句,以及嵌套在SELECT语句中的视图和子查询等技术为中心进行学习。
由于视图和子查询可以像表一样进行使用,因此如果能恰当地使用这些技术,就可以写出更加灵活的 SQL 了。

● 表中保存的是实际的数据,而视图中保存的是SELECT语句(视图本身并不存储数据)。
● 使用视图,可以轻松完成跨多表查询数据等复杂操作。
● 可以将常用的SELECT语句做成视图来使用。
● 创建视图需要使用CREATE VIEW语句。
● 视图包含“不能使用ORDER BY”和“可对其进行有限制的更新”两项限制。


■ 视图和表

通常,我们在创建表时,会通过 INSERT 语句将数据保存到数据库之中,而数据库中的数据实际上会被保存到计算机的存储设备(通常是硬盘)中。
因此,我们通过 SELECT 语句查询数据时,实际上就是从存储设备(硬盘)中读取数据,进行各种计算之后,再将结果返回给用户这样一个过程。
但是使用视图时并不会将数据保存到存储设备之中,而且也不会将数据保存到其他任何地方。实际上视图保存的是 SELECT 语句(图 5-1)。

■ 视图的优点

第二个优点就是可以将频繁使用的 SELECT 语句保存成视图,这样就不用每次都重新书写了。 
数据保存在表中时,必须要显式地执行 SQL 更新语句才能对数据进行更新;视图中的数据会随着原表的变化自动更新。 

特别是在进行汇总以及复杂的查询条件导致 SELECT 语句非常庞大时,使用视图可以大大提高效率。

■ 创建视图的方法



还可能出现以视图为基础创建视图的多重视图(图 5-2)。例如,我们可以像代码清单 5-4 那样以 ProductSum 为基础创建出视图 ProductSumJim

■ 视图的限制①——定义视图时不能使用ORDER BY子句在 PostgreSQL 中 才可以。)
■ 视图的限制②——对视图进行更新

■ 能够更新视图的情况

代码清单5-A 允许PostgreSQL对视图进行更新

/* 
  在PostgreSQL中执行代码清单5-6的INSERT语句之前
  必须要执行以下代码将试图设置为可以更新。
*/
CREATE OR REPLACE RULE insert_rule
AS ON INSERT
TO  ProductJim DO INSTEAD
INSERT INTO Product VALUES (
           new.product_id, 
           new.product_name, 
           new.product_type, 
           new.sale_price, 
           new.purchase_price, 
           new.regist_date);
View Code

posted @ 2020-01-23 09:45  Marlon康  阅读(294)  评论(0编辑  收藏  举报