什么是视图?如何创建、更新和删除视图?
视图是一张虚拟表,帮我们封装了底层与数据表的接口。它相当于是一张表或多张表的数据结果集。视图的这一特点,可以帮我们简化复杂的 SQL 查询,比如在编写视图后,我们就可以直接重用它,而不需要考虑视图中包含的基础查询的细节。
创建视图:
CREATE VIEW view_name AS
SELECT column1,column2
FROM table
WHERE condition;
视图创建之后,可以直接使用。
嵌套视图:
当我们创建好一张视图之后,还可以在它的基础上继续创建视图。
CREATE VIEW view_new AS
SELECT player_id,height
FROM player
WHERE height > (SELECT AVG(height) FROM view_old );
修改视图:ALTER VIEW
ALTER VIEW view_name AS
SELECT column1, column2
FROM table
WHERE condition;
修改的语法和创建视图一样,只是对原有视图的更新。
删除视图:
DROP VIEW view_name;
如何使用视图简化 SQL 操作
利用视图完成复杂的连接,以后我们进行查询的时候,可以直接通过视图查询。
利用视图对数据进行格式化:
当需要输出某种格式的内容时,可以用视图完成数据格式化的操作。
CREATE VIEW view_name AS
SELECT CONCAT(player_name, '(' , team.team_name, ')') AS player_team FROM player JOIN team ON player.team_id = team.team_id;
//CONCAT函数可以将player_name 字段和 team_name 字段以及‘(’, ')'进行拼接。
使用视图计算字段:
eg:统计每位球员在每场比赛中的二分球、三分球和罚球的得分。
CREATE VIEW view_name AS
SELECT game_id,player_id, (shoot_hits-shoot_3_hits)*2 AS shoot_2_points, shoot_3_hits*3 AS shoot_3_points, shoot_p_hits AS shoot_p_points, score FROM player_score;
视图的优缺点:
安全性:虚拟表是基于底层数据表的,我们在使用视图时,一般不会轻易通过视图对底层数据进行修改,即使是使用单表的视图,也会受到限制,比如计算字段,类型转换等是无法通过视图来对底层数据进行修改的,这也在一定程度上保证了数据表的数据安全性。同时,我们还可以针对不同用户开放不同的数据查询权限,比如人员薪酬是个敏感的字段,那么只给某个级别以上的人员开放,其他人的查询视图中则不提供这个字段。
简单清晰:视图是对 SQL 查询的封装,它可以将原本复杂的 SQL 查询简化,在编写好查询之后,我们就可以直接重用它而不必要知道基本的查询细节。同时我们还可以在视图之上再嵌套视图。这样就好比我们在进行模块化编程一样,不仅结构清晰,还提升了代码的复用率。
性能差:sql server必须把视图查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,sql server也要把它变成一个复杂的结合体,需要花费一定的时间。
修改限制:当用户试图修改试图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改,对于简单的试图来说,这是很方便的,但是,对于比较复杂的试图,可能是不可修改的。
视图和临时表的区别
视图是虚拟表,临时表是真实存在的数据表,不过它不用于长期存放数据,只为当前连接存在,关闭连接后,临时表就会自动释放。