9.2.2 创建多表视图

在实际应用中,更多的视图是基于多个基表的视图,这样的视图能充分展示它的优点。下面就介绍基于两个表的视图。

笔者把表PRODUCTINFO当中的CATEGORY(商品类型)字段设计成存放编码的字段(参见图9.1所示的CATEGORY字段),而商品类型则单独设计成了表CATEGROYINFO(商品类型信息表),详细的表结构可以参考第4章。这样做符合数据设计的原则,也方便开发者的使用。

【示例2】创建多表视图

下面创建的视图是把PRODUCTINFO和CATEGORY这两个表关联起来查询的,目的是把商品类型编码替换成商品类型。编写如下SQL语句并在SQL*Plus中执行:


01 CREATE OR REPLACE VIEW MULTI_PRODUCTINFO_VIEW

02 AS

03 SELECT PT.PRODUCTID,PT.PRODUCTNAME,PT.PRODUCTPRICE,PT.CATEGORY,

04 CG.CATEGROYNAME,PT.ORIGIN

05 FROM PRODUCTINFO PT,CATEGROYINFO CG

06 WHERE PT.CATEGORY=CG.CATEGROYID

07 AND PT.ORIGIN='中国'

08 AND ROWNUM<10;


如果执行成功将会出现如下字样:


视图已创建


【代码解析】

❑第1行表示创建或覆盖名称为MULTI_PRODUCTINFO_VIEW的视图。

❑第3行和第4行中字段前面多了"PT"或"CG"字样,这是表的别名,能直观了解到该字段属于哪个表。

❑第4行的CG.CATEGROYNAME字段表示产品类型名称。

❑第6行表示查询数据的条件之一是把PRODUCTINFO中CATEGORY字段和CATEGROYINFO中CATEGROYID字段值相等的关联起来,以达到把商品类型编码替换成商品类型的目的。

❑第7行和第8行详细解释参考9.2.1小节。

【执行效果】

查询视图MULTI_PRODUCTINFO_VIEW,执行如下语句,会得到图9.4所示结果。


SELECT PRODUCTID 产品ID,PRODUCTNAME 产品名称,PRODUCTPRICE 产品价格,

CATEGORY 产品类型编码,CATEGROYNAME 产品类型,ORIGIN 产地

FROM MULTI_PRODUCTINFO_VIEW;


9.2.2 创建多表视图 - 图1

图 9.4 视图MULTI_PRODUCTINFO_VIEW查询结果

参照查询结果可以发现,在视图中“产品类型编码”和“产品类型”是一一对应的,这样就可以直接使用视图而没有必要写烦琐的关联语句。

技巧 在SQL*Plus中如果展示行宽不足,可以使用如下语句增加行宽。这样可以避免出现查询结果换行的情况。


SET LINESIZE 200


如果想了解一下SQL语句的执行效率如何,可以使用下面的语句,这样每次执行完毕后都会给出执行耗费时间。对于SQL*Plus中格式的设置,还可以参考第14章。


SET TIMING ON