SQL基础教程(第2版)第5章 复杂查询:5-1 视图和表
本章将以此前学过的SELECT语句,以及嵌套在SELECT语句中的视图和子查询等技术为中心进行学习。由于视图和子查询可以像表一样进行使用,因此
如果能恰当地使用这些技术,就可以写出更加灵活的 SQL 了。
● 表中保存的是实际的数据,而视图中保存的是SELECT语句(视图本身并不存储数据)。
● 使用视图,可以轻松完成跨多表查询数据等复杂操作。
● 可以将常用的SELECT语句做成视图来使用。
● 视图包含“不能使用ORDER BY”和“可对其进行有限制的更新”两项限制。
■视图和表
通常,我们在创建表时,会通过 INSERT 语句将数据保存到数据库之中,而数据库中的数据实际上会被保存到计算机的存储设备(通常是硬盘)中。
因此,我们通过 SELECT 语句查询数据时,实际上就是从存储设备(硬盘)中读取数据,进行各种计算之后,再将结果返回给用户这样一个过程。
但是使用视图时并不会将数据保存到存储设备之中,而且也不会将数据保存到其他任何地方。实际上视图保存的是 SELECT 语句(图 5-1)。
■视图的优点
第二个优点就是可以将频繁使用的 SELECT 语句保存成视图,这样就不用每次都重新书写了。
数据保存在表中时,必须要显式地执行 SQL 更新语句才能对数据进行更新;而视图中的数据会随着原表的变化自动更新。
特别是在进行汇总以及复杂的查询条件导致 SELECT 语句非常庞大时,使用视图可以大大提高效率。
■创建视图的方法




还可能出现以视图为基础创建视图的多重视图(图 5-2)。例如,我们可以像代码清单 5-4 那样以 ProductSum 为基础创建出视图 ProductSumJim。
■视图的限制①——定义视图时不能使用ORDER BY子句(在 PostgreSQL 中 才可以。)
■视图的限制②——对视图进行更新


代码清单5-A 允许PostgreSQL对视图进行更新
/*
在PostgreSQL中执行代码清单5-6的INSERT语句之前
必须要执行以下代码将试图设置为可以更新。
*/
CREATE OR REPLACE RULE insert_rule
AS ON INSERT
TO ProductJim DO INSTEAD
INSERT INTO Product VALUES (
new.product_id,
new.product_name,
new.product_type,
new.sale_price,
new.purchase_price,
new.regist_date);

SQL基础教程(第2版)第5章 复杂查询:5-1 视图和表的更多相关文章
- 推荐《SQL基础教程(第2版)》中文PDF+源代码+习题答案
我认为<SQL基础教程(第2版)>非常适合数据库学习的初学者.论述的角度是读者的角度,会换位思考到读者在看到这一段时候会发出怎样的疑问,非常难得:原始数据的例题只有一道,但是可以反复从不同 ...
- 笔记-Python基础教程(第二版)第一章
第一章 快速改造:基础知识 01:整除.乘方 (Python3.0之前 如2.7版本) >>> 1/2 ==>0 1/2整除,普通除法: 解决办法1: 1.0/2.0 ==& ...
- [SQL基础教程] 3-2 对表进行分组
[SQL基础教程] 3-2 对表进行分组 GROUP BY SELECT <列名1>,<列名2>,... FROM <表名> GROUP BY <列名1> ...
- SQL Server2012 T-SQL基础教程--读书笔记(8 - 10章)
SQL Server2012 T-SQL基础教程--读书笔记(8 - 10章) 示例数据库:点我 CHAPTER 08 数据修改 8.1 插入数据 8.1.1 INSERT VALUES 语句 8.1 ...
- [SQL基础教程] 5-1视图
[SQL基础教程] 5-1视图 视图和表 从SQL角度看视图就是一张表 视图与表的差别 表保存了实际的数据,视图保存的是SELECT语句: 视图的优点 节省存储空间: 将常用的Select 语句保存成 ...
- [SQL基础教程] 4-4 事务
[SQL基础教程] 4 数据更新 4-4 事务 事务 需要在同一处理单元中执行的一系列更新处理的集合 创建事务 事务开始语句; DML语句1; DML语句2; . . . 事务结束语句; 事务开始语句 ...
- [SQL基础教程] 4-3 数据的更新(UPDATE)
[SQL基础教程] C4 数据更新 4-3 数据的更新(UPDATE) UPDATE UPDATE <表名> SET <列名> = <表达式>; UPDATE &l ...
- [SQL基础教程] 4-2 数据删除(DELETE)
[SQL基础教程] C4 数据更新 4-2 数据删除(DELETE) DROP TABLE / DELETE DROP TABLE - 完全删除表 DELETE - 仅删除数据,保留表容器 DELET ...
- [SQL基础教程] 4-1 数据的插入(INSERT)
[SQL基础教程] C4 数据更新 4-1 数据的插入(INSERT) INSERT INSERT INTO <表名>(列1,列2...) VALUES(值1,值2...); 清单 用() ...
随机推荐
- Ubuntu安装Python版本管理工具pyenv
gyf@gyf-VirtualBox:~$ git clone https://github.com/yyuu/pyenv.git ~/.pyenvCloning into '/home/gyf/.p ...
- 中兴将用“加减乘除”建立理想 5G 网络
6 月 28 日,MWC 2019 上海展期间,中兴通讯执行董事.总裁徐子阳发表演讲表示,面对 5G 建网大势,要看破大势,不破不立.为此中兴将用“加减乘除”建立理想 5G 网络. 何为“加减乘除 ...
- Asp.net mvc+EF+Sql Server2008数据库缓存依赖
1.开启数据库缓存依赖功能(开启对数据库中表Article和ArticleType的缓存) (注:)如果要配置SqlCacheDependency,则需要以命令行的方式执行. aspnet_regsq ...
- Oracle 组函数count()
1.count() 函数的参数除了可以是字段值和表达式外,还可以是“ * ”.如果是字段值或表达式,则忽略空值且考虑重复值:如果是“ * ”,则计算所有的行,也包括空值.如果要查询某字段非重复值的个数 ...
- java核心-多线程-零碎知识收集
1.不能使用Integer作为并发锁 原因:synchronized(Integer)时,当值发生改变时,基本上每次锁住的都是不同的对象实例,想要保证线程安全,推荐使用AtomicInteger之类会 ...
- 4. Retrieving a mapper(检索映射器)
Retrieving a mapper(检索映射器) 4.1. The Mappers factory(映射工厂) 可以通过 org.mapstruct.factory.Mappers 类检索映射器实 ...
- 用Git管理项目进行版本控制
一.安装 1.1windows 要在Windows系统中安装Git,请访问http://msysgit.github.io/,并单击Download.安装. 1.2 在 Linux 系统中安装 Git ...
- 找《飘》 中最常用的N个单词。
找<飘> 中最常用的N个单词. 1,题目:输出单个文件(<飘> 英文版)中的前 N 个最常出现的英语单词,并将结果输入到文本文件中. 2,设计思路: 1),按行依次读取文件并按 ...
- 安装与配置windbg的symbol(符号)
http://msdn.microsoft.com/en-us/windows/hardware/gg463028.aspx windows symbols下载地址 本篇是新手自己写的一点心得.建议 ...
- oracle常用密令大全
1.create user username identified by password;//建用户名和密码oracle ,oracle 2.grant connect,resource,dba t ...