什么是视图?
视图是可视化的表。
本节讲解如何创建、更新和删除视图。
在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。
视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。
您可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样。
创建视图
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
注释:视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的 SQL 语句重建数据。
CREATE VIEW 示例
样本数据库 yuanbian 拥有一些被默认安装的视图。
视图 "dayuan" 会从 "articles" 表列出所有author为"大猿"的资源。这个视图使用下面的 SQL 创建:
CREATE VIEW dayuan_resource AS
SELECT title, pub_date
FROM articles
WHERE author="大猿"
UNION
SELECT title, pub_date
FROM downloads
WHERE author="大猿"
执行上面的SQL语句就会在数据库中创建一个名为 "dayuan_resource
"的视图
可以通过 SQL语句: show tables
查看到已经创建的视图,与数据表一样存在数据库中
视图查询
从视图查询数据与从数据表中查询数据一样:
SELECT * FROM dayuan_resource
通过查询视图的方式,避免了每次需要书写复杂的查询语句
更新视图
如果需要更新视图,可以使用 REPLACE:
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
更新视图示例
修改刚才的"dayuan_resource"视图,添加字段" author".
通过下列 SQL 更新视图:
CREATE OR REPLACE VIEW dayuan_resource AS
SELECT title, author, pub_date
FROM articles
WHERE author="大猿"
UNION
SELECT title, author, pub_date
FROM downloads
WHERE author="大猿"
MS Server更新视图
MS Server使用ALTER修改视图
ALTER VIEW [ schema_name . ] view_name [ ( column [ ,...n ] ) ]
[ WITH <view_attribute> [ ,...n ] ]
AS select_statement
[ WITH CHECK OPTION ] [ ; ]
<view_attribute> ::= { [ ENCRYPTION ] [ SCHEMABINDING ] [ VIEW_METADATA ] }
- schema_name: 视图所属db的名称。
- view_name: 要更改的视图名称。
- column: 将成为指定视图的一部分的一个或多个列的名称(以逗号分隔)。
撤销视图
您可以通过 DROP VIEW 命令来删除视图。
DROP VIEW view_name
MySQL视图示例
根据 yuanbian 数据库创建一个视图,列出访问数前3的文章
CREATE VIEW articles_top3 AS
SELECT a.title,sum(avl.`count`) as `count`, avl.aid
FROM articles a
LEFT JOIN
article_view_log avl
ON a.id=avl.aid
GROUP BY aid
ORDER by count DESC
LIMIT 3
我们可以像这样查询上面这个视图:
SELECT * FROM articles_top3
执行结果
+-----------------+-------+------+
| title | count | aid |
+-----------------+-------+------+
| ETL快速入门 | 733 | 5 |
| Javascript | 510 | 4 |
| python元类 | 330 | 2 |
+-----------------+-------+------+
我们也可以向查询添加条件。假设仅仅需要查看 count>500的记录:
SELECT * FROM articles_top3
WHERE `count` > 500
执行结果
+-----------------+-------+------+
| title | count | aid |
+-----------------+-------+------+
| ETL快速入门 | 733 | 5 |
| Javascript | 510 | 4 |
+-----------------+-------+------+
讨论区