sql必知必会(第四版) 学习笔记二 视图

时间:2022-11-30 02:03:11

本书用到的几个表的建表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必知必会&lpar;第四版&rpar; 学习笔记一

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

  6. 算法&lpar;第四版&rpar;学习笔记之java实现希尔排序

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

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

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

  8. Thinking in Java&comma;Fourth Edition&lpar;Java 编程思想&comma;第四版&rpar;学习笔记&lpar;十四&rpar;之Type Information

    Runtime type information (RTTI) allow you to discover and use type information while a program is ru ...

  9. Thinking in Java&comma;Fourth Edition&lpar;Java 编程思想&comma;第四版&rpar;学习笔记&lpar;十三&rpar;之Strings

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

随机推荐

  1. java分布式事务

    1.现有方案 a.atomikos b.jotm 说明:spring3.0已将jotm的支持踢掉 2.使用atomikos时的pom.xml内容 <!-- 分布式事务支持-atomikos-be ...

  2. DataGridView常用操作

    一.DataGridView列右击菜单事件处理 (1). 添加一个快捷菜单contextMenuStrip1:(2). 给dataGridView1的CellMouseDown事件添加处理程序: pr ...

  3. 文件上传工具类 UploadUtil&period;java

    package com.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...

  4. jQuery 使用 jQuery UI 部件工厂编写带状态的插件(翻译)

    首先,我们要创建一个progress bar,它只允许我们简单的设置进度值.正如我们接下来将要看到的,我们需要通过调用 jQuery.widget 及其两个参数来实现这一操作,这两个参数分别是:将要创 ...

  5. UVA-514 Rails &lpar;栈&rpar;

      Rails  There is a famous railway station in PopPush City. Country there is incredibly hilly. The s ...

  6. python之多继承与&lowbar;&lowbar;mro&lowbar;&lowbar;的使用

    1 class Base(object): def text(self): print('------text-----') class A(Base): def text(self): print( ...

  7. png 变透明

    using  System.Drawing Image image;    image = Image.FromFile("d:\\1.png");    Bitmap bitma ...

  8. Unix Programming :文件IO

    文件描述符常量(unistd.h): STDIN_FILENO STDOUT_FILENO STDERR_FILENO 通常这些常量分别对应于数字0,1,2 文件操作需要头文件 fcntl.h ,一些 ...

  9. Java从零开始学二十七&lpar;NumberFormat类&rpar;

    一.NumberFormat表示数字的格式化类 NumberFormat表示数字的格式化类,即:可以按照本地的风格习惯进行数字的显示. No. 方法 类型 描述 1 public static Loc ...

  10. 【Pthon入门学习】多级菜单小例子

    menu_list = { '北京':{ '昌平':{ '回龙观':{ '和谐家园':{}, '矩阵小区':{}, '北店家园':{} }, '沙河':{ '北街家园1区':{}, '北街家园2区': ...