sql必知必会(第四版) 学习笔记二 视图
本书用到的几个表的建表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_contact
from Customers,Orders,OrderItems
where OrderItems.order_num = Orders.order_num and Customers.cust_id = Orders.cust_id
and prod_id = 001; --上面的话我们可以通过修改prod_id号,查询产品所订购者的顾客信息,但是每次都这么写就略繁琐了
--如果我们把上面所需要的列数据写到一个视图中 然后在视图中进行相关查询 就简便了很多
go
create view ProductCustomer as
select cust_name,cust_address,cust_contact,prod_id
from Customers,Orders,OrderItems
where 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_contact
from ProductCustomer
where 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有篇比较好的博客讲视图的,连接如下:
http://blog.csdn.net/jbhou/article/details/3176262
sql必知必会(第四版) 学习笔记二 视图的更多相关文章
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(二)之Introduction to Objects
The genesis of the computer revolution was a machine. The genesis of out programming languages thus ...
- 算法第四版学习笔记之优先队列--Priority Queues
软件:DrJava 参考书:算法(第四版) 章节:2.4优先队列(以下截图是算法配套视频所讲内容截图) 1:API 与初级实现 2:堆得定义 3:堆排序 4:事件驱动的仿真 优先队列最重要的操作就是删 ...
- 算法第四版学习笔记之快速排序 QuickSort
软件:DrJava 参考书:算法(第四版) 章节:2.3快速排序(以下截图是算法配套视频所讲内容截图) 1:快速排序 2:
- sql必知必会(第四版) 学习笔记
还有一个<Sqlserver2008技术内幕>的笔记,也很好!~ http://www.cnblogs.com/liupeng61624/p/4354983.html 温习一遍简单的sql ...
- sql必知必会(第四版) 学习笔记一
温习一遍简单的sql语法,把自己掌握还不够的地方,做了些笔记.... 1 去重复关键词,distinct select distinct sname from student; 2 限制结果top的用 ...
- 算法(第四版)学习笔记之java实现希尔排序
希尔排序思想:使数组中随意间隔为h的元素都是有序的. 希尔排序是插入排序的优化.先对数组局部进行排序,最后再使用插入排序将部分有序的数组排序. 代码例如以下: /** * * @author seab ...
- 算法(第四版)学习笔记之java实现可以动态调整数组大小的栈
下压(LIFO)栈:可以动态调整数组大小的实现 import java.util.Iterator; public class ResizingArrayStack<Item> imple ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十四)之Type Information
Runtime type information (RTTI) allow you to discover and use type information while a program is ru ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十三)之Strings
Immutable Strings Objects of the String class are immutable. If you examine the JDK documentation fo ...
随机推荐
- 用cflow工具生成代码函数调用关系
1. 安装 sudo apt-get install cflow 2.使用 cflow [options...] [file]... 例: cflow main.c 生成main.c文件例的函数调用关 ...
- Webfrom 上传 单个上传 多个上传
文件上传控件:FileUpload - 控件,界面+方法+属性Button/LinkButton/ImageButton FileUpload控件:1.SaveAs("要上传到服务器的绝对路 ...
- 三维偏序-二维LIS
Another Longest Increasing Subsequence Problem 有两种思路. 思路一: 考虑到如果只有一维,那么可以用f[s]表示长度为s时,最后一个数是多少,把这个想法 ...
- [C++程序设计]有默认参数的函数
实参与形参的结合是从左至右顺序进行的.因此指定默认值的参数必须放在形参表列中的最右端,否 则出错.例如: void f1(float a,int b=0,int c,char d=′a′); //不正 ...
- Constructing Roads(1102 最小生成树 prim)
Constructing Roads Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- apache主目录,配置文件目录结构说明
apache服务安装成功后,主要的目录结构如下: |-- bin 程序命令目录[apache执行文件的目录如apachectl,htpassed] |-- build |-- cgi-bin 预设给一 ...
- Blogger建立Blog部落格 - Blog透视镜
Google谷歌提供Blogger免费建立Blog部落格服务,高自由度的设计,模版全面开放,允许你加入HTML/Script,最重要的是可以自定义网域,辛苦经营的Blog部落格,不希望有朝一日,倘若搬 ...
- CSS之清除浮动
一.清除浮动的目的. 1.当一个父元素的高度不写或为auto时,而且这个父元素内又有浮动的子元素,那么这时候该父元素的高度将不会自动适应子元素的高度,也可以说高度是0px; 有如下代码: <di ...
- 用 Graphviz画神经网络图
用 Graphviz . 以下代码提供一个例子, 具体使用时做简单修改即可. digraph G { rankdir=LR splines=line nodesep=.05; node [label= ...
- Linux系统编程(13)——Shell的基本语法
按照惯例,Shell变量由全大写字母加下划线组成,有两种类型的Shell变量:环境变量和本地变量. 环境变量: 环境变量可以从父进程传给子进程,因此Shell进程的环境变量可以从当前Shell进程传给 ...