一、视图的基本概念

视图是用于查询的另外一种方式。 与实际的表不同,它是一个虚表;因此数据库中只存在视图的定义,而不存在视图中相对应的数据,数据仍然存放在原来的基本表中。视图是一种逻辑对象。

二、 视图能做什么

导出数据; 在导出数据时,常常需要多个表联合查询,这个时候就可以使用视图;转换字段,如把status(0/1 Int类型)字段转换成启用/停用(文字) ,然后用视图保存定义。

数据安全,可以给视图加密。

三、视图操作

3.1 查询数据

(一)准备素材:

使用两张表,其中一张是家电表,另外一张字典表(只需要知道这两张表有一个连接字段brandID-RowID:注意两个表没有强制使用外键约束),准备好素材

SELECT TOP 1000 [appliancesName]  ,[appliancesType]  ,[code]  ,[**brandId**]  ,[standard]  ,[appliancesStatus]  ,[appliancesIsNew]  ,[appliancesIsKey]  ,[appliancesRemark]  ,[appliancesId] FROM sfa_t_appliances
 SELECT TOP 1000 [**RowID**]  ,[PRowID]  ,[DicKey]  ,[DicVal]  ,[Status] FROM sfa_t_TSysDictionary

(二)创建视图:

create view appliances_view(id,name,brandName)as select s.appliancesId,s.appliancesName,d.DicValfrom sfa_t_appliances s,sfa_t_TSysDictionary dwhere s.brandId = d.RowID

(三)查询:

查询数据,可以将视图看做一张实实在在的数据表,能够执行各种查询操作。

如下图所示,执行一个查询操作:

(四)备注

有些书上说:可以对任何查询结果进行排序,但是只有当视图包括Top子句时才能排序视图。这样看来书上确实是有问题的。动手实践出真知

3.2 插入数据

实验一

往视图中插入一条数据:

解释:

往视图中插入数据时,能够往sfa_t_appliances 中插入数据。但是视图为什么读取不到呢?

create view appliances_view(id,name,brandName)as select s.appliancesId,s.appliancesName,d.DicValfrom sfa_t_appliances s,sfa_t_TSysDictionary dwhere s.brandId = d.RowID

实验二

说明: 往只含一个基本字段中插入数据是完全没有问题的。上图也插入成功了。

实验三

将多个基表的字段都插入试试:

insert into appliances_view(id,name,brandName) values(112234,'视图','冰箱')

小节:

使用INSERT语句进行插入操作的视图必须能够在基表(组成视图查询的表)中插入数据,否则会操作失败。

如果视图上没有包括基表中所有属性为not null的行,那么插入操作会由于哪些列的NULL值而失败。

补充

通过视图可以向数据库表中插入数据,修改数据和删除表中数据。如果视图的SELECT语句中包含了DISTINCT、表达式(如计算列和函数),或FROM子句中引用多个表,或者引用不可更新的视图,或有Group by 或者having子句,那么都不能通过视图操作数据。

3.3 修改数据

解释

能够对数据进行修改,但是只能修改一张表中的数据。

查看下图,修改基于两个表的字段:

失败了,说明只能修改一张表中的字段。

3.4 删除数据

小结:

如果一个视图链接了两个以上的基表,则不允许进行数据删除操作。如果视图中的列是常数或者几个字符串列值得和,那么尽管插入和更新操作时不允许的,但是却可以进行删除操作。

实验:

(一) 创建基于一个表的视图:

(二)执行删除操作结果:

(三)结果说明:

基于一个表的视图是能够执行删除操作的。

更多相关文章

  1. MySQL系列多表连接查询92及99语法示例详解教程
  2. 如何去掉状态栏和内容视图之间的黑色阴影线
  3. Pycharm安装PyQt5的详细教程
  4. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  5. android用户界面之按钮(Button)教程实例汇
  6. android中文api(89)——ViewManager
  7. 【Android(安卓)开发教程】Toast通知
  8. Android中的FILL_PARENT与WRAP_CONTENT的区别
  9. android用户界面-组件Widget-地图视图MapView

随机推荐

  1. android 8.1 移除hifi_sensor feature
  2. android:process=":remote"
  3. Android指定调用系统自带浏览器打开链接
  4. Android帧布局-实现渐变效果
  5. 搭建Android开发环境01——Java
  6. Android自定义ProgressBar
  7. 查看android路由表
  8. Android修改PackageInstaller自动安装指
  9. Android SDK更新失败对策
  10. 一张图片覆盖在另一个图片上