9.2.7 有关视图的案例

本小节将介绍一个比较真实的练习环境,使读者迅速巩固对视图的操作。这里将接触到使用函数的视图。下面有4张表,这4张表是简单的二手车买卖的原型,其中各表之间的关系约束这里就不给出了。详细表结构如下:

1.二手车记录表

该表存放库存中二手车的简单信息。共有5个字段,分别是编号、车牌号、商标编码、成色编码、是否售出(1:售出,0:未售出)。数据库中这些字段的数据类型定义如表9.1所示。

9.2.7 有关视图的案例 - 图1

2.买卖记录表

该表存放二手车的交易记录。共有6个字段,分别是序号、车牌号、商标编码、交易日期、交易者、备注。数据库中这些字段的数据类型定义如表9.2所示。

9.2.7 有关视图的案例 - 图2

3.车牌名称表

该表存放汽车商标(车牌名称)的种类,是字典表。共有两个字段,分别是车牌编码、车牌名称。数据库中这些字段的数据类型定义如表9.3所示。

9.2.7 有关视图的案例 - 图3

4.车辆成色表

该表存放待出售汽车的成色,是字典表。共两个字段,分别是成色编码、成色。数据库中这些字段的数据类型定义如表9.4所示。

9.2.7 有关视图的案例 - 图4

下面将利用“二手车记录表”、“买卖记录表”、“车牌名称表”以及“车辆成色表”这4张表创建示例7和示例8两个视图。

【示例7】要求列出售出车辆的明细列表,包括序号、车牌号、车牌名称(商标)、售出日期、售出人、成色

【示例分析】

此视图需要用到4张表,并需要利用连接查询的方式把“车牌名称(商标)”、“成色”字段的编码替换成真正的名称。

在PL/SQL Developer的SQL窗口中执行如下脚本,正常情况下会提示创建成功。这部分操作可参考前面所讲内容。


01 CREATE OR REPLACE VIEW TRADREC_DETAIL_VIEW

02 AS

03 SELECT TC.ID,TC.CARRGNUM,CB.CARBRAND,TC.BGDATE,TC.BARGAINER,CFB.CARFETTLE

04 FROM TRADREC TC,CARINFO CO,CARBARANDTAB CB,CARFETTLETAB CFB

05 WHERE TC.CARBRANDID=CB.CARBRANDID

06 AND CO.CARFETTLEID=CFB.CARFETTLEID

07 AND TC.CARRGNUM=CO.CARRGNUM

08 ORDER BY CB.CARBRAND


【代码解析】

❑第3~5行是执行连接查询。这里需要注意的是,因为这4张表都有关系约束,所以这里列出匹配记录就能满足我们的要求,如果没有关系约束,读者可以根据实际情况使用外连接查询。

❑第8行是根据车牌名称默认方式排序(升序)。

【示例8】要求统计某个日期之后不同品牌的车卖出的数量

【示例分析】

该视图只需用到两张表,分别是tradrec(买卖记录表)和carbarandtab(车牌名称表)。根据要求创建视图需要用到连接和分组,以达到统计的目的。

执行如下脚本:


01 CREATE OR REPLACE VIEW TRADREC_STAT_VIEW

02 AS

03 SELECT CB.CARBRAND,COUNT(CARRGNUM)AS QUANTITY

04 FROM TRADREC TC,CARBARANDTAB CB

05 WHERE TC.BGDATE>TO_DATE('2007-5-10','YYYY-MM-DD')

06 AND TC.CARBRANDID=CB.CARBRANDID

07 GROUP BY CB.CARBRAND


【代码解析】

❑第3行和第7行对应组合表示根据CB.CARBRAND(车牌名称)字段分组,把不同品牌的汽车数量利用函数COUNT()计算出来,并把计算出的数量取别名为QUANTITY。

❑第5行是一个字符串转成日期的函数。该行效果是把日期大于“2007-5-10”的数据列出。

注意 在视图中函数的使用比较常见,如果这方面比较薄弱,最好多加练习。另外,在使用函数或运算表达式时必须指定列的别名。