数据库 / 32 SQL 视图

SQL 视图

1. 定义

慕课解释:视图是一个或多个表记录的集合,其结构和数据是建立在其它表的查询基础之上的。视图可以理解为表,它可以像表一样操作,但是视图不是真实存在,它只是一张虚表。

2. 前言

本小节,我们将一起学习 SQL 中的视图

在一些场景中,有些查询的结果集很大,且我们需要在多处复用到这些结果集;如果每次都去查询一次,会耗费大量的时间,SQL 支持我们将这些数据集保存为视图,并且可以像操作表一样去操作这些视图。

本小节测试数据如下,请先在数据库中执行:

DROP TABLE IF EXISTS imooc_user;
CREATE TABLE imooc_user
(
  id int PRIMARY KEY,
  username varchar(20),
  age int
);
INSERT INTO imooc_user(id,username,age)
VALUES (1,'peter',18),(2,'pedro',24),(3,'jerry',22),(4,'mike',18),(5,'tom',20);

3. 视图的创建与删除

视图的数据来源于查询。

其基础创建语法如下:

CREATE VIEW [view_name] 
AS
SELECT [col] FROM [table_name];

视图也可以被删除,语法如下:

DROP VIEW [view_name];

其中view_name表示视图名称,col代表字段名称,table_name表示数据表名称。

3.1 例1 新建视图

请书写 SQL 语句,查询 imooc_user 的所有idage字段,并以该结果新建一个视图。

分析:

按照视图创建语法写出语句即可。

语句:

CREATE VIEW user_shorcut_view 
AS
SELECT id,username FROM imooc_user;

创建成功后,结果如下:

# select * from user_shorcut_view;
+----+----------+
| id | username |
+----+----------+
| 1  | peter    |
| 2  | pedro    |
| 3  | jerry    |
| 4  | mike     |
| 5  | tom      |
+----+----------+

3.2 例2 删除视图

请书写 SQL 语句,删除user_shorcut_view视图。

分析:

使用 Drop 指令删除该视图即可。

语句:

DROP VIEW user_shorcut_view;

4. 操作视图

视图可以像数据表一样操作,且数据表的数据被更新后,也会同步更新到与之相关的视图中。

4.1 例3 查询视图

请书写 SQL 语句,从 user_shorcut_view 视图中找出id2的用户。

分析:

使用 Select 指令像查询数据表一样查询视图。

语句:

SELECT username FROM user_shorcut_view WHERE id = 2;

结果如下:

+----------+
| username |
+----------+
| pedro    |
+----------+

5. 小结

  • 视图很大程度上可以简化查询操作,还可以定制数据。
  • 视图不易创建过多,由于更新表的同时也会更新关联的视图,因此视图会降低数据库的性能。