视图用法

创建视图

视图中的列名默认地等于select 子句中的列名,视图继承列名。我们也可以显式地定.义视图的列名。

CREATE view STRATFORDERS(PLAYERNO,NAME,ININ,BORN)AS
(
   SELECT PLAYERNO,NAME,INITIALS,BIRTH_DATE  
   FROM PLAYERS  
   WHERE TOWN='Stratford'  
)

select *
from `stratforders`
where playerno >90

 视图五个应用领域

1、例程语句的简化

频繁使用的或者结构相似的语句,可以通过使用视图来进行简化

 SELECT   *
FROM     PLAYERS
WHERE    PLAYERNO IN
        (SELECT   PLAYERNO
         FROM     PENALTIES)
AND      TOWN = 'Stratford'
;
SELECT   TOWN, COUNT(*)
FROM     PLAYERS
WHERE    PLAYERNO IN
        (SELECT   PLAYERNO
         FROM     PENALTIES)
GROUP BY TOWN
;

 这两条语句都考虑那些至少引发一次罚款的球员,因此可以用一个视图来定义球员的这个子集

CREATE   VIEW PPLAYERS AS
SELECT   *
FROM     PLAYERS
WHERE    PLAYERNO IN
        (SELECT   PLAYERNO
         FROM     PENALTIES)

SELECT   *
FROM     PPLAYERS
WHERE    TOWN = 'Stratford'
;
SELECT   TOWN, COUNT(*)
FROM     PPLAYERS
GROUP BY TOWN

2、重新组织表

    表是以一个特定情况为基础设计和实现的。这种情况有时候可能变化,这意味着表的结构也要
改变。例如,可能要向一个表中插入新的一列,或者两个表需要联接成为一个单个的表。在大多数
情况下,一个表结构的重新组织都需要改变已经编写和运行的语句。这样的改变,既浪费时间也代
价昂贵。适当地使用视图可以使这些时间和成本最小化。让我们看看如何做到这一点。

对于每一个参赛球员。获取其名字,首字母和他所效力的球队的分级。

SELECT   DISTINCT NAME, INITIALS, DIVISION
FROM     PLAYERS AS P, MATCHES AS M, TEAMS AS T
WHERE    P.PLAYERNO = M.PLAYERNO
AND      M.TEAMNO = T.TEAMNO

由于某些未知的原因,TEAMS表和MATCHS表需要重新组织。它们组合成一个表.即RESULTS表
RAESULT表中的CAPTAIN列就是之前的TEAMS表中的PLAYERNO列。这个列被贼予了另外一个名字,否则,将会有两个PLAYERNO列,而引用这两个表的所有语句,包括前而的SELEC语句。现在都需要重写。为防止需要全部重写,一个更好的解决方案是,分别定义两个视图来表示前而
的TEAMS 和MATCHES表。
CREATE   VIEW TEAMS (TEAMNO, PLAYERNO, DIVISION) AS
SELECT   DISTINCT TEAMNO, CAPTAIN, DIVISION
FROM     RESULT
;
CREATE   VIEW MATCHES AS
SELECT   MATCHNO, TEAMNO, PLAYERNO,
         WON, LOST
FROM     RESULT

     这两个视图中的侮一个虚拟的内容都分别和两个原始表中的内容相同。没有语句需要重新编写包括本节前面的select 语句。
当然,我们来能使用视图来解决一个表的每次重组

posted @ 2011-09-29 19:31  nba76ers  阅读(920)  评论(0)    收藏  举报