数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

SQL实战新手入门:创建视图(2)


发布日期:2020年10月03日
 
SQL实战新手入门:创建视图(2)

创建视图(

下面的视图将返回位于书柜顶层(#)书架中价格最贵的前本图书的名称该示例使用了Microsoft SQL Server语法(它支持在视图中使用ORDER BY子句)

CREATE VIEW vwTopbooksOnthShelf

AS

SELECT TOP

loc_position_left AS position

bk_title AS title

bk_id

FROM location INNER JOIN books

ON locationfk_bk_loc = booksbk_id

WHERE loc_shelf =

ORDER BY bk_price DESC;

运行视图中的SELECT语句将返回数据的一个子集它只有个列限制为最顶部的条记录并且按照BK_PRICE列排序(尽管通过该视图无法访问BK_PRICE列)

SELECT * FROM vwTopbooksOnthShelf;

position title bk_id

Wiley Pathways: Introduction to Database Management

SQL Bible

SQL Functions: Programmers Reference

row(s) affected)

使用视图抽取数据不仅可以隐藏底层数据模型的复杂性使数据对用户更加友好而且还可以拒绝访问未通过视图暴露出来的行和列从而为数据访问提供一种安全机制例如如果想让用户能够查询位于第个书架中价格最贵的前本图书但是又不洩漏图书的实际价格那么上面例子中的视图可以实现这样的功能即使BK_PRICE列存在于底层的表中只有查询该视图(vwTopbooksOnthShelf视图)权限的用户也永远无法看到图书的价格或是查询出价格排名第位的图书

试一试用视图包装复杂性

下面将构造一个相对比较复杂的查询其中包含了多个JOIN语句和一个GROUP BY子句以查找用指定搜索标志例如SQL标记的图书并将其按照出版年份进行分组将该查询包装到一个视图中然后观察如何使用视图向用户隐藏底层的复杂性该示例使用Microsoft SQLServer创建但在本书介绍的其他RDBMS中无须任何修改也能正常运行

) 连接到RDBMS打开New Query窗口

) 在查询窗口中输入下面的代码并单击Execute按钮

CREATE VIEW vwOneComplexView

AS

SELECT bk_title AS title

bk_published_year AS pub_year

locloc_shelf

FROM books bk INNER JOIN books_authors ba

ON bkbk_id = babk_id

INNER JOIN authors au

ON baau_id = auau_id

INNER JOIN location loc

ON bkbk_id = locfk_bk_loc

INNER JOIN search_books sb

ON sbbk_id = bkbk_id

INNER JOIN searchTags st

ON sttag_id = sbtag_id

WHERE locloc_shelf =

AND sttag_value IN (SQL

GROUP BY

bk_published_year

bk_title

bk_price

loc_shelf

) 确认该命令是否执行成功以及是否确实创建了vwOneComplexView视图

) 从查询窗口中删除代码输入下面的代码执行一个新的查询

SELECT * FROM vwOneComplexView

ORDER BY title;

title pub_year loc_shelf

Microsoft SQL Server Weekend Crash Course

SQL Bible

SQL Functions: Programmers Reference

Wiley Pathways: Introduction to Database Management

row(s) affected)

示例说明

该视图使用INNER JOIN语法连接了个表另外它强加了两个限制一是仅搜索标记为SQL的图书二是仅搜索位于顶层书架(第个书架)中的图书同时按照BOOKS表的BK_PUBLISHED_YEAR列(以及其他个列)进行分组通过将这些复杂性包装在一个视图中就可以简化业务用户需要运行的查询并同时实施某些业务和安全规则如果对该视图仅有SELECT权限那么用户就不可能查询到视图指定搜索条件之外的图书记录只有以SQL标记并且位于第个书架中的图书才会出现在视图的结果集中用户可以使用ORDER BY子句对视图的结果进行排序只需要通过视图暴露的别名就可以引用视图在上面对该视图的查询中使用了ORDER BY子句按照TITLE列对查询视图的结果进行了排序该ORDER BY子句将覆盖在定义视图的语法中GROUP BY子句产生的默认顺序

返回目录SQL实战新手入门

编辑推荐

Oracle索引技术

高性能MySQL

数据仓库与数据挖掘培训视频教程

上一篇:SQL实战新手入门:创建视图(1)

下一篇:SQL实战新手入门:修改视图