SQL系列(十四)—— 视图(view)
2024-09-05 10:47:22
说到视图view,大家应该都很熟悉。如几何学中用三视图来描述集合物体的外观构成,三视图中反应出物体的面貌。这里我们讨论数据库中视图的概念:
- 什么是视图
- 为什么会有会用视图
- 怎样使用视图
- 视图与表的异同点
1.什么是视图
视图:以一定的视角看数据。即视图是一张虚拟的表,本身不存储任何数据,数据都来源于实际的表中。有查询的SQL构成,查询的SQL的结果可以看成是一张虚拟的表即是一种看待的数据的方式,所以这种操作实际就是数据视图。
注:是不是和三视图有点像,都是实物的虚拟描述。
看一个例子加深认识:
CREATE VIEW ProductsView AS SELECT cust_name, cust_contact
FROM Customers, Orders, OrderItems
WHERE Customers.cust_id = Orders.cust_id
AND OrderItems.order_num = Orders.order_num
使用视图:
SELECT * FROM ProductView WHERE order_num = 'shang1';
这就是视图的应用,基于查询检索创建视图描述,然后查询时直接使用视图。
2.为什么要用视图
上面说到视图基于查询SQL,是一张虚表。从定义描述中可以看出,使用视图会带来以下的好处:
- 把复杂的查询SQL简化,为复杂的SQL创建视图,应用中只要根据条件过滤查询视图即可
- 基于视图,可以重复利用SQL,一次编写,多次运行
- 视图既然是基于查询SQL,那么可以对返回的结果做一定的控制,所以视图可以用来做一定的权限控制
3.怎样使用
现在有三张表:学生表,课程表,选课表
如果需要查询张三选了那些课程信息:
SELECT c.id FROM scourse AS sc INNER JOIN student AS s ON sc.c_id = s.c_id AND s.name = '张三';
以上需要连接查询,SQL较为复杂,可以创建视图:
CREATE VIEW SCVIEW AS SELECT c.id FROM scourse AS sc INNER JOIN student AS s ON sc.c_id = s.c_id;
然后查询时:
SELECT * FROM SCVIEW WHERE name = '张三';
这样就起到SQL简化的作用了。
同样如果需要查询李四选修的课程:
SELECT * FROM SCVIEW WHERE name = '李四';
这样就可以重复利用SQL了。
4.视图与表的异同点
1.相同点
- 都可以用于检索数据
- 查询时语法相同,都是使用SELECT、FROM、WHERE子句
- 视图和表都可以连接嵌套查询
2.差异点
- 视图是虚表,没有关于列的定义,而表有列定义
- 视图是虚表,只是一种表示数据的方式,而表时物理实体,存储实际的行数据
- 视图不能修改数据,而表可以修改数据
- 视图上不能创建索引,表上可以创建索引
参考
《SQL必知必会》
最新文章
- js中XMLHttpRequest对象实现GET、POST异步传输
- 0929mysql 用户管理和权限设置
- php面向对象中的魔术方法中文说明
- hdu 4714 Tree2cycle 树形经典问题
- POJ 2378-Tree Cutting(树形dp)
- bzoj 3751: [NOIP2014]解方程 同余系枚举
- React 笔记
- java数据类型转换那点事
- Java 随笔记录
- AccessibilityService+WindowManager+SurfaceView开系统权限
- DOM 节点
- Vue 知识整理—02-起步
- Startup 类
- [转]Docker学习之四:使用docker安装mysql
- (10)Python函数
- java:合并两个排序的整数数组A和B变成一个新的数组。新数组也要有序。
- POJ3417 Network
- POJ3414—Pots(bfs加回溯)
- get-post区别
- Linux中目录proc/net/dev详解
热门文章
- 浓缩版java8新特性
- WorkFlow一:WorkFlow基础配置
- mysql官网下载对应的mysql包
- 十六、python面向对象基础篇
- 201871010133-赵永军《面向对象程序设计(java)》第二周学习总结
- gitlab 提示:remote: The project you were looking for could not be found.
- sudo:有效用户 ID 不是 0,sudo 属于 root 并设置了 setuid 位吗?
- Django Model的外键自关联‘self'和设置'unique_together'
- python基础之六:编码简介以及python3中的编码
- FFT和NTT学习笔记_基础