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 ...
随机推荐
- Ubuntu的防火墙UFW
这是个简单的防火墙,可以直接在命令行启停,也可安装提图形端gufw *安装 sudo apt-get install ufw gufw *常用命令 sudo ufw enable //启动 ufw d ...
- [Spring入门学习笔记][创建网站URL]
设计网站的URL 现代的Web站点都会设计一套拥有明确意义,方便用户记忆的URL,不论是域名还是路径,以天码营为例: http://tianmaying.com/courses表示网站下所有的课程列表 ...
- ubuntu 快捷图标
ubuntu的图标都存在 /usr/share/applications下 图标是Desktop的后缀 首先gedit /usr/share/applications/xx.Desktop xx为应用 ...
- 教师投票系统(JSP+MySQL)
display.jsp <%@ page language="java" import="java.sql.*" pageEncoding="g ...
- (转) eclipse debug (调试) 学习心得
1.Step Into (also F5) 跳入2.Step Over (also F6) 跳过3.Step Return (also F7) 执行完当前method,然后return跳出此metho ...
- codeforces 337C Quiz(贪心)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Quiz Manao is taking part in a quiz. The ...
- tomcat解决乱码
今天遇到个问题,太尴尬了: 本来做好并测试号的项目提交到svn, 组员下了之后,又部分url传递的中文参数在另一个jsp接收出现乱码(只有我的不乱码). 改了之后更尴尬的事情发生了:组员的全部不乱码, ...
- Spring HibernateTemplate的使用
Spring HibernateTemplate的使用 2008-03-25 11:38 2020人阅读 评论(0) 收藏 举报 springbeanhibernatesessiondaoclass ...
- php 数组Array 删除指定键名值
if(array_key_exists('keyname',$array)){ //检查数组中此键名是否存在: unset($array['keyname']); //删除后位置仍然保留,但清空了键名 ...
- PyQt4.11.3(python3.4+QT4)ui文件生成py文件
最近开始接触学习Python,所以想用QT弄个窗体程序出来玩玩,环境是Python3.4.2.PyQt4.11.3-Py3.4.Win7.用PyQt自带的Designer设计出一个窗体ui文件后,需要 ...