分层的视图
实际上视图只是数据库中的另一个表因此可以将其作为创建其他视图的基础事实上在同一个查询中可以将视图与其他视图或表进行联接然后再在其上创建一个新的视图
如果想查找第个书架上价格最贵的前本书的作者则可以使用本章之前创建的vwTopbooksOnthShelf视图并添加来自AUTHORS表的数据例如下面的代码
CREATE VIEW vwTopBooksWithAuthors
AS SELECT
vwbk_id
vwtitle
auau_last_name
FROM vwTopbooksOnthShelf vw JOIN books_authors ba
ON vwbk_id = babk_id
JOIN authors au
ON baau_id = auau_id;
SELECT * FROM vwTopBooksWithAuthors;
bk_id title au_last_name
SQL Bible Kriegel
SQL Bible Trukhnov
Wiley Pathways: Introduction to Database Management Gillenson
Wiley Pathways: Introduction to Database Management Ponniah
Wiley Pathways: Introduction to Database Management Taylor
Wiley Pathways: Introduction to Database Management Powell
Wiley Pathways: Introduction to Database Management Miller
Wiley Pathways: Introduction to Database Management Trukhnov
Wiley Pathways: Introduction to Database Management Kriegel
SQL Functions: Programmers Reference Kriegel
SQL Functions: Programmers Reference Jones
SQL Functions: Programmers Reference Stephens
SQL Functions: Programmers Reference Plew
SQL Functions: Programmers Reference Garrett
( row(s) affected)
在上面这个例子中将一个视图(vwTopbooksOnthShelf)与两个表进行了联接并在其上创建了另外一个视图vwTopBooksWithAuthors这样就可以使用单个SELECT语句从vwTopBooksWithAuthors视图中抽取数据而无须关心封装在这两个视图中的各种业务规则因为视图已经对数据集的条件进行了限制即只返回位于顶层书架(甚至都不需要知道顶层是第层)中并且价格最贵的前本图书
分层的视图为我们提供了各种各样的可能性设想一下可以构建一个精心设计的视图层次结构从数据模型中抽取各种数据让数据用户只需要使用一个简单的SELECT语句就可以获取信息而无须关心底层数据的复杂性!当然这需要在服务器的性能方面付出一定的代价由于视图本质上是动态的因此无法像优化表一样对视图进行同样的优化对于数据检索视图的速度也不可能像表一样快速在视图之上添加另外一级的视图将会对数据库的性能造成更加负面的影响尽管分层的视图有着合理的应用场合但应该注意它对性能造成的影响
返回目录SQL实战新手入门
编辑推荐
Oracle索引技术
高性能MySQL
数据仓库与数据挖掘培训视频教程