本书用到的几个表的建表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必知必会(第四版) 学习笔记二 视图的更多相关文章

  1. 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 ...

  2. 算法第四版学习笔记之优先队列--Priority Queues

    软件:DrJava 参考书:算法(第四版) 章节:2.4优先队列(以下截图是算法配套视频所讲内容截图) 1:API 与初级实现 2:堆得定义 3:堆排序 4:事件驱动的仿真 优先队列最重要的操作就是删 ...

  3. 算法第四版学习笔记之快速排序 QuickSort

    软件:DrJava 参考书:算法(第四版) 章节:2.3快速排序(以下截图是算法配套视频所讲内容截图) 1:快速排序 2:

  4. sql必知必会(第四版) 学习笔记

    还有一个<Sqlserver2008技术内幕>的笔记,也很好!~ http://www.cnblogs.com/liupeng61624/p/4354983.html 温习一遍简单的sql ...

  5. sql必知必会(第四版) 学习笔记一

    温习一遍简单的sql语法,把自己掌握还不够的地方,做了些笔记.... 1 去重复关键词,distinct select distinct sname from student; 2 限制结果top的用 ...

  6. 算法(第四版)学习笔记之java实现希尔排序

    希尔排序思想:使数组中随意间隔为h的元素都是有序的. 希尔排序是插入排序的优化.先对数组局部进行排序,最后再使用插入排序将部分有序的数组排序. 代码例如以下: /** * * @author seab ...

  7. 算法(第四版)学习笔记之java实现可以动态调整数组大小的栈

    下压(LIFO)栈:可以动态调整数组大小的实现 import java.util.Iterator; public class ResizingArrayStack<Item> imple ...

  8. 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 ...

  9. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十三)之Strings

    Immutable Strings Objects of the String class are immutable. If you examine the JDK documentation fo ...

随机推荐

  1. 用cflow工具生成代码函数调用关系

    1. 安装 sudo apt-get install cflow 2.使用 cflow [options...] [file]... 例: cflow main.c 生成main.c文件例的函数调用关 ...

  2. Webfrom 上传 单个上传 多个上传

    文件上传控件:FileUpload - 控件,界面+方法+属性Button/LinkButton/ImageButton FileUpload控件:1.SaveAs("要上传到服务器的绝对路 ...

  3. 三维偏序-二维LIS

    Another Longest Increasing Subsequence Problem 有两种思路. 思路一: 考虑到如果只有一维,那么可以用f[s]表示长度为s时,最后一个数是多少,把这个想法 ...

  4. [C++程序设计]有默认参数的函数

    实参与形参的结合是从左至右顺序进行的.因此指定默认值的参数必须放在形参表列中的最右端,否 则出错.例如: void f1(float a,int b=0,int c,char d=′a′); //不正 ...

  5. Constructing Roads(1102 最小生成树 prim)

    Constructing Roads Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  6. apache主目录,配置文件目录结构说明

    apache服务安装成功后,主要的目录结构如下: |-- bin 程序命令目录[apache执行文件的目录如apachectl,htpassed] |-- build |-- cgi-bin 预设给一 ...

  7. Blogger建立Blog部落格​​ - Blog透视镜

    Google谷歌提供Blogger免费建立Blog部落格服务,高自由度的设计,模版全面开放,允许你加入HTML/Script,最重要的是可以自定义网域,辛苦经营的Blog部落格,不希望有朝一日,倘若搬 ...

  8. CSS之清除浮动

    一.清除浮动的目的. 1.当一个父元素的高度不写或为auto时,而且这个父元素内又有浮动的子元素,那么这时候该父元素的高度将不会自动适应子元素的高度,也可以说高度是0px; 有如下代码: <di ...

  9. 用 Graphviz画神经网络图

    用 Graphviz . 以下代码提供一个例子, 具体使用时做简单修改即可. digraph G { rankdir=LR splines=line nodesep=.05; node [label= ...

  10. Linux系统编程(13)——Shell的基本语法

    按照惯例,Shell变量由全大写字母加下划线组成,有两种类型的Shell变量:环境变量和本地变量. 环境变量: 环境变量可以从父进程传给子进程,因此Shell进程的环境变量可以从当前Shell进程传给 ...