SQL 視圖
1. 定義
慕課解釋:
視圖
是一個(gè)或多個(gè)表記錄的集合,其結(jié)構(gòu)和數(shù)據(jù)是建立在其它表的查詢基礎(chǔ)之上的。視圖可以理解為表,它可以像表一樣操作,但是視圖不是真實(shí)存在,它只是一張?zhí)摫怼?/p>
2. 前言
本小節(jié),我們將一起學(xué)習(xí) SQL 中的視圖
。
在一些場景中,有些查詢的結(jié)果集很大,且我們需要在多處復(fù)用到這些結(jié)果集;如果每次都去查詢一次,會(huì)耗費(fèi)大量的時(shí)間,SQL 支持我們將這些數(shù)據(jù)集保存為視圖,并且可以像操作表一樣去操作這些視圖。
本小節(jié)測(cè)試數(shù)據(jù)如下,請(qǐng)先在數(shù)據(jù)庫中執(zhí)行:
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. 視圖的創(chuàng)建與刪除
視圖的數(shù)據(jù)來源于查詢。
其基礎(chǔ)創(chuàng)建語法如下:
CREATE VIEW [view_name]
AS
SELECT [col] FROM [table_name];
視圖也可以被刪除,語法如下:
DROP VIEW [view_name];
其中 view_name
表示視圖名稱,col
代表字段名稱,table_name
表示數(shù)據(jù)表名稱。
3.1 例 1 新建視圖
請(qǐng)書寫 SQL 語句,查詢 imooc_user 的所有 id
和 age
字段,并以該結(jié)果新建一個(gè)視圖。
分析:
按照視圖創(chuàng)建語法寫出語句即可。
語句:
CREATE VIEW user_shorcut_view
AS
SELECT id,age FROM imooc_user;
創(chuàng)建成功后,結(jié)果如下:
# select * from user_shorcut_view;
+----+----------+
| id | username |
+----+----------+
| 1 | peter |
| 2 | pedro |
| 3 | jerry |
| 4 | mike |
| 5 | tom |
+----+----------+
3.2 例 2 刪除視圖
請(qǐng)書寫 SQL 語句,刪除 user_shorcut_view
視圖。
分析:
使用 Drop 指令刪除該視圖即可。
語句:
DROP VIEW user_shorcut_view;
4. 操作視圖
視圖可以像數(shù)據(jù)表一樣操作,且數(shù)據(jù)表的數(shù)據(jù)被更新后,也會(huì)同步更新到與之相關(guān)的視圖中。
4.1 例 3 查詢視圖
請(qǐng)書寫 SQL 語句,從 user_shorcut_view 視圖中找出 id
為 2
的用戶。
分析:
使用 Select 指令像查詢數(shù)據(jù)表一樣查詢視圖。
語句:
SELECT username FROM user_shorcut_view WHERE id = 2;
結(jié)果如下:
+----------+
| username |
+----------+
| pedro |
+----------+
5. 小結(jié)
- 視圖很大程度上可以簡化查詢操作,還可以定制數(shù)據(jù)。
- 視圖不易創(chuàng)建過多,由于更新表的同時(shí)也會(huì)更新關(guān)聯(lián)的視圖,因此視圖會(huì)
降低
數(shù)據(jù)庫的性能。