请稍候,加载中....

SQL VIEW (视图)

什么是视图?

视图是可视化的表。

本节讲解如何创建、更新和删除视图。

在 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 |
+-----------------+-------+------+

 


Python学习手册-