博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql必知必会(第四版) 学习笔记二 视图
阅读量:5218 次
发布时间:2019-06-14

本文共 2802 字,大约阅读时间需要 9 分钟。

本书用到的几个表的建表sql语句如下:

--销售产品供应商CREATE TABLE Vendors    (   vend_id varchar(20) not null,   vend_name varchar(50) not null,   vend_address varchar(100),  vend_city varchar(100),  vend_state varchar(100),     vend_zip varchar(20),  vend_country varchar(100),  PRIMARY KEY(vend_id),  )go--产品表CREATE TABLE Products(    prod_id  varchar(20) not null,   vend_id varchar(20) not null,  prod_name varchar(100) not null,  prod_price float,  prod_desc  varchar(200),  PRIMARY KEY(prod_id),  FOREIGN KEY(vend_id) REFERENCES Vendors(vend_id))go--顾客表CREATE TABLE Customers(  cust_id varchar(20),  cust_name varchar(100),  cust_address varchar(100),  cust_city varchar(100),  cust_state varchar(100),  cust_country varchar(100),  cust_contact varchar(100),  cust_email varchar(100),  PRIMARY KEY(cust_id))go--订单表CREATE TABLE Orders(    order_num varchar(20),   order_date date,  cust_id varchar(20),  PRIMARY KEY(order_num),  FOREIGN KEY(cust_id) REFERENCES Customers(cust_id)  )go--OrderItems表 存储每个订单中的实际物品CREATE TABLE OrderItems( order_num varchar(20), order_item varchar(20),  prod_id  varchar(20),  quantity int,  item_price float,  FOREIGN KEY(order_num) REFERENCES Orders(order_num),  FOREIGN KEY(prod_id) REFERENCES Products(prod_id))

 

--视图/*  1 视图是虚拟的表,只包含使用时动态检索数据的查询  2 视图中包含的数据是从其他表中检索出来的,当这些表中数据改变时视图中数据也将返回改变过得数据  3 在特定条件下也可以通过视图的修改影响基表数据*/--通过联合查询 来查询订购了某种产品的顾客信息select cust_name,cust_address,cust_contactfrom Customers,Orders,OrderItemswhere OrderItems.order_num = Orders.order_num and Customers.cust_id  = Orders.cust_idand prod_id = 001;--上面的话我们可以通过修改prod_id号,查询产品所订购者的顾客信息,但是每次都这么写就略繁琐了--如果我们把上面所需要的列数据写到一个视图中 然后在视图中进行相关查询 就简便了很多gocreate view ProductCustomer asselect cust_name,cust_address,cust_contact,prod_idfrom Customers,Orders,OrderItemswhere OrderItems.order_num = Orders.order_num and Customers.cust_id  = Orders.cust_id--上面创建的视图中就包含了,cust_name,cust_address,cust_contact,prod_id 所对应的一张视图--可以查询视图得到想要的结果 和上面效果一样select cust_name,cust_address,cust_contactfrom ProductCustomerwhere prod_id = 001--这种情况修改涉及到了两个表 不能进行更新update ProductCustomer2  set cust_name = '张三(修正5)',order_date='1999-1-1'where cust_name = '张三(修正4)'--涉及到一张表 所以可以update Customers set cust_name = '张三(修正2)',cust_address = '皇家计量大学院'where cust_name =  '张三(修正)'

可更新视图

只要满足下列条件,即可通过视图修改基础基表的数据:

任何修改(包括 UPDATE、INSERT 和 DELETE 语句)都只能引用一个基表的列。

视图中被修改的列必须直接引用表列中的基础数据。不能通过任何其他方式对这些列进行派生,如通过以下方式:

聚合函数:AVG、COUNT、SUM、MIN、MAX、GROUPING、STDEV、STDEVP、VAR 和 VARP。

计算。不能从使用其他列的表达式中计算该列。使用集合运算符 UNION、UNION ALL、CROSSJOIN、EXCEPT 和 INTERSECT 形成的列将计入计算结果,且不可更新。

被修改的列不受 GROUP BY、HAVING 或 DISTINCT 子句的影响。

上述限制适用于视图的 FROM 子句中的任何子查询,就像其应用于视图本身一样。通常情况下,数据库引擎 必须能够明确跟踪从视图定义到一个基表的修改。

我对视图的一点理解:

     通过视图我们可以把几张表中相关的有用信息提取到一张表(视图)中,虽然视图在数据库中不存在,是虚拟的表,但是我们可以通过查找视图获得我们想查找的数据,简化了复杂的SQL操作。

CSDN有篇比较好的博客讲视图的,连接如下:

   

转载于:https://www.cnblogs.com/KingsWang/p/3392576.html

你可能感兴趣的文章
【SICP练习】85 练习2.57
查看>>
runC爆严重安全漏洞,主机可被攻击!使用容器的快打补丁
查看>>
Maximum Product Subarray
查看>>
solr相关配置翻译
查看>>
通过beego快速创建一个Restful风格API项目及API文档自动化(转)
查看>>
解决DataSnap支持的Tcp长连接数受限的两种方法
查看>>
Synchronous/Asynchronous:任务的同步异步,以及asynchronous callback异步回调
查看>>
ASP.NET MVC5 高级编程-学习日记-第二章 控制器
查看>>
Hibernate中inverse="true"的理解
查看>>
高级滤波
查看>>
使用arcpy添加grb2数据到镶嵌数据集中
查看>>
[转载] MySQL的四种事务隔离级别
查看>>
QT文件读写
查看>>
C语言小项目-火车票订票系统
查看>>
15.210控制台故障分析(解决问题的思路)
查看>>
BS调用本地应用程序的步骤
查看>>
常用到的多种锁(随时可能修改)
查看>>
用UL标签+CSS实现的柱状图
查看>>
mfc Edit控件属性
查看>>
Linq使用Join/在Razor中两次反射取属性值
查看>>