(1)什么是视图?
(2)视图有哪些使用场景?
(1)什么是视图?
视图其实是一个SQL语句,定义视图的SQL语法如下:
例如,下面的SQL语句定义了一个视图,视图名称是myview,as后面跟的是SQL查询语句:
定义好的视图,如何使用呢?
我们可以像使用真实表一样,对视图进行查询(select)操作。从某视图中查询出指定结果的SQL语句的书写方法如下:
视图可以理解为一个虚拟表,为什么是虚拟表呢?
这是因为数据库中存放的是定义视图的SQL语句,视图中不存放真实的数据,视图运行结果表中的数据来自真实源表(也就是视图定义中SQL查询语句中的表)。真实源表、视图的关系如图4.11所示。
图4.11 视图的运行逻辑
(2)视图有哪些使用场景?
既然视图只是一个虚拟的表,实际数据还是存储在真实源表中,那我们直接使用真实源表就行了,为什么还要用视图呢?
视图常起到保证数据安全的作用,下面举一个例子。
“公积金缴纳表”存储在数据库中,里面记录了缴纳公积金者的姓名、身份证号、缴纳金额、就职公司等。
因为业务需求,其他人员需要经常从数据库中查询这个表,而缴纳人员的身份证号、就职公司属于私密信息,不宜公开。
如何使这个人既能查看这个表,又能隐去缴纳人员的身份证号、就职公司等私密信息呢?
答案是用视图就可以实现,保证数据安全。
定义一个视图,该视图只取“公积金缴纳表”中的“姓名”和“缴纳金额”列。
SQL语句的书写方法如下:
将定义好的视图(视图名称为公积金)的查询权限分配给需要的人,这些人便可以通过视图来查看使用数据了,SQL语句的书写方法如下:
这样,查看的人便不会接触到缴纳人员的身份证号、就职公司等私密信息。
考查视图的概念,要理解什么是视图及视图有什么用。
请你说一下with...as语句与视图的区别。
with...as语句与视图的区别如下。
(1)with...as语句创建的是一个临时表,使用后即释放,不存放在数据库中,不需要删除;视图存储在数据库中,创建的是虚拟表,若要释放存储空间,则需要进行删除。
(2)with...as语句不能使用语句结束符“;”;创建视图的语句是一条完整的SQL语句,需要使用语句结束符“;”。
(3)with...as语句定义的临时表只能使用在紧跟其后的select语句中;视图则可以在不同的SQL语句中反复多次调用。
(4)with...as语句的作用主要是提高SQL语句的易读性;视图除了可以提高SQL语句的易读性,也有保证数据安全的作用。
考查with...as语句和视图的概念,要理解with...as语句的用法和视图的用法。