13.1 使用CREATE VIEW创建视图(2)

代码13-2 创建视图列出那些居住在有出版社的城市的作者。注意视图使用了列名au_city和pub_city。重命名这些列避免了两列从基础表继承相同的列名city

1. CREATE VIEW
2.   (au_id, au_city, pub_id, pub_city)  
3. AS
4. SELECT
5. FROM
6. INNER JOIN
7. ON

代码13-3 创建视图,按某一出版社图书的不同类型列出总收入(=价格×销量)。因为对数学表达式显式命名而不是让DBMS分配默认名,这个视图在以后会很容易查询


    1. CREATE VIEW
    2.   (Publisher, BookType, Revenue)  
    3. AS
    4. SELECT pub_id, type, SUM(price * sales)  
    5. FROM
    6. GROUP BY


    代码13-4 为使打印作者邮寄标签变得容易而创建视图。注意程序在SELECT子句中而不是CREATE VIEW子句中指定列名


    1. CREATE VIEW
    2. AS
    3. SELECT
    4. ' '
    5. AS 'address1',  
    6.       TRIM(address)  
    7. AS 'address2',  
    8. ', '
    9. ' '
    10. AS 'address3'
    11. FROM


    代码13-5 创建列出作者A02和A05的姓及两个人所写(或合写)图书的视图。注意这个语句使用了嵌套视图,它引用代码13-1创建的视图au_names。

    1. CREATE VIEW
    2. AS
    3. SELECT
    4. FROM
    5. INNER JOIN
    6. ON
    7. INNER JOIN
    8. ON
    9. WHERE an.au_id in ('A02','A05');


    '提示

    不能创建临时视图。视图和临时表的持久性是不同的。视图存在于SQL语句的生存期,临时表存在于进程的生存期,参见11.10节。

    标准SQL没有ALTER VIEW语句。如果在视图创建之后,基础表或视图发生了改变,就要删除并重建这个视图。然而,Microsoft SQL Server、Oracle、DB2、MySQL和PostgreSQL都支持非标准的ALTER VIEW语句。

    在Microsoft Access中运行CREATE VIEW语句时,视图将作为一个查询对象出现在数据库窗口。为了运行代码13-4,将每个||变为+,参见5.4节的DBMS提示。为了运行代码13-5,输入:

    1. CREATE VIEW
    2.   (LastName, Title)  
    3. AS
    4. SELECT
    5. FROM
    6. INNER JOIN
    7. INNER JOIN
    8. ON
    9. ON
    10. WHERE an.au_id IN ('A02','A05');


    为了在Microsoft SQL Server中运行代码13-1至代码13-5,要删除每个语句的结束分号。另外,为了运行代码13-4,要将每一个||变为+,将每一个TRIM(x)变为LTRIM(RTRIM(x)),参见5.4节和5.7节中的DBMS提示。

    为了在Oracle 8i和之前的版本运行代码13-2和代码13-5,要使用WHERE语法而不是JOIN语法。对于代码13-2输入:

    1. CREATE VIEW
    2.   (au_id, au_city, pub_id, pub_city)  
    3. AS
    4. SELECT
    5.       p.pub_id, p.city  
    6. FROM
    7. WHERE


    对于代码13-5:


      1. CREATE VIEW
      2.   (LastName, Title)  
      3. AS
      4. SELECT
      5. FROM
      6.       au_names an, titles t  
      7. WHERE
      8. AND
      9. AND an.au_id in ('A02','A05');


      为了在DB2中运行代码13-4,应将所有TRIM(x)变为LTRIM(RTRIM(x)),参见5.7节的DBMS提示。

      为了在MySQL中运行代码13-4,应使用CONCAT()函数而不是联接操作符||,参见5.4节的DBMS提示。MySQL 5.0和之后版本支持视图,之前版本不能运行本节的代码。(为了在之前版本隐藏数据,可使用MySQL的权限系统来限制列的访问。)

      在Microsoft SQL Server、Oracle、DB2、MySQL和PostgreSQL中,创建视图时可以加入可选的WITH [CASCADED | LOCAL] CHECK OPTION子句。这个子句只用于可修改的视图,并确保只有能够被视图读取的数据可以被插入、更新或删除,参见13.3节。如果视图显示来自纽约州的作者,就不可能通过视图插入、更新或删除非纽约州的作者。CASCADED和LOCAL选项只能用于嵌套视图。CASCADED执行对当前视图和所有引用视图的检查。LOCAL只执行对当前视图的检查。