logo资料库

数据库系统概念(讲义)浙江大学.pdf

第1页 / 共25页
第2页 / 共25页
第3页 / 共25页
第4页 / 共25页
第5页 / 共25页
第6页 / 共25页
第7页 / 共25页
第8页 / 共25页
资料共25页,剩余部分请下载后查看
数据库系统概念笔记
1 引言
1.1 数据库系统与文件系统
1.2 数据模型
1.2.1 实体联系模型
1.2.2 关系模型
1.2.3 其他数据模型
1.3 数据库语言
1.3.1 数据定义语言
1.3.2 数据库操纵语言
1.3.3 来自应用程序的数据库访问
1.4 数据库系统结构
1.4.1 存储管理器
1.4.2 查询处理器
2 基本SQL语句
2.1 背景
2.2 基本结构
2.2.1 select子句
2.2.2 where子句
2.2.3 from子句
2.2.4 更名运算(as)
2.2.5 字符串匹配(like)
2.2.6 排序(order by)
2.3 集合运算
2.3.1 并运算(union)
2.3.2 交运算(intersect)
2.3.3 差运算(except)
2.4 聚集函数
2.4.1 求平均值示例
2.4.2 分组求和示例
2.4.3 删除重复元组
2.4.4 限制分组条件(having)
2.4.5 计算表中记录个数
2.4.6 where和having同时存在
2.5 空值
2.6 嵌套子查询
2.6.1 连接词in
2.6.2 集合的比较(>some,>all)
2.6.3 exists测试查询结果是否为空
2.6.4 unique测试查询结果中是否存在重复
3 数据库关系和视图
3.1 SQL关系的命令
3.1.1 定义关系
3.1.2 删除关系
3.1.3 修改关系
3.2 视图
3.2.1 定义视图
3.2.2 临时视图(with)
3.3 数据库修改
3.3.1 删除
3.3.2 插入
3.3.3 更新
3.4 关系的连接
3.4.1 内连接
3.4.2 左(右)外连接
3.4.3 全外连接
4 完整性和安全
4.1 完整性约束
4.1.1 域约束
4.1.2 参照完整性
4.1.3 断言
4.2 触发器
4.3 授权
4.3.1 SQL中的权限
4.3.2 授予权限
4.3.3 收回权限
4.3.4 角色
数据库系统概念笔记 这是在阅读机械工业出版社的《数据库系统概念》一书的一些笔记摘录, 方便以后查看,主要与 SQL 相关。 整理人:谭奇宇 2008-9-25 1 引言 数据库管理系统(DBMS)由一个互相关联的数据的集合和一组用以访问这 些数据的程序组成。这个数据的集合通常称为数据库。 1.1 数据库系统与文件系统 文件系统的主要弊端: 数据冗余和不一致 数据访问困难 数据库系统要解决的问题: 数据孤立 完整性问题 原子性问题 并发访问异常 安全性问题 1.2 数据模型 数据库结构的基础是数据模型。数据模型是一个描述数据、数据联系、数据 语义以及一致性约束的概念工具的集合。下面阐述两种数据模型:实体-联系模 型和关系模型。
1.2.1 实体联系模型 实体-联系(E-R)模型认为现实世界由一组称为实体的基本对象以及这些对 象间的联系构成。实体是现实世界中区别其他对象的一个“事件”或一个“物体”。 数据库中的实体通过属性集合来描述。联系是实体间的相互关系。 1.2.2 关系模型 关系模型(Relation Model)是用表的集合来表示数据和数据间的关系。关系 数据模型是使用最广泛的数据模型。关系模型比 E-R 模型的抽象层次更低。数 据库设计通常基于 E-R 模型来进行,然后再转化成关系模型。 1.2.3 其他数据模型 网状数据模型 层次数据模型 面向对象的数据模型 对象关系数据模型 可扩展标记语言(XML) 1.3 数据库语言 1.3.1 数据定义语言 数据定义语言(DDL)用于定义数据库模式。数据字典包含了元数据。元数 据是关于数据的数据。如表的模式(描述了表的结构)即一个元数据。数据在数 据库中的存储必须满足一致性约束,DDL 提供了指定这种约束的工具。 1.3.2 数据库操纵语言 数据库操纵语言(DML)即描述增、删、查、改等数据库操纵的语言。 1.3.3 来自应用程序的数据库访问 应用程序接口:ODBC 和 JDBC。
扩展宿主语言定义,嵌入 DML 调用,需要借助 DML 预编译器。 1.4 数据库系统结构 1.4.1 存储管理器 权限及完整性管理器 事务管理器 文件管理器 缓冲区管理器 数据文件 数据字典 索引 1.4.2 查询处理器 DDL 解释器 DML 编译器 查询求值引擎
2 基本 SQL 语句 2.1 背景 SQL(Sequel)是一种查询语言,使用了关系代数和关系演算的组合(参考 关系数据库模型)。 SQL 语言由以下几个部分组成: 数据定义语言 DDL:SQL DDL 提供定义关系模式、删除关系以及修改 关系模式的命令。 交互式数据操纵语言 DML:SQL DML 包括基于关系代数和元组关系演 算的查询语言,还包括在数据库中插入、删除、修改元组的命令。 视图定义 View Definition 命令。 事务控制 Transaction Control 命令。 嵌入式 Embeded SQL 和动态 Dynamic SQL。 完整性 Integrity:SQL DDL 包括定义数据库必须满足的完整性约束命令。 权限管理:SQL DDL 中包括说明对关系和视图的访问权的命令。 2.2 基本结构 一个关系数据库包含一个关系的集合,每个关系其实就是一个表,表中的列 即对应关系中的属性,每个属性由一个允许的值得集合,我们称之为域。 SQL 表达式基本结构包括三个子句:select、from 和 where。 select 子句对应关系代数中的投影运算,用来列出查询结果中的属性。 from 子句对应关系代数中的笛卡尔积运算,列出表达式求值中需扫描的 关系。 where 子句对应关系代数中的选择谓词,包括一个作用在 from 子句关系 属性上的谓词。 一个典型的 SQL 查询具有如下形式: select A1, A2, …, An from r1, r2, …, rn where P
其中Ai表示属性,rj表示关系,P表示谓词。SQL先构造from子句中关系的笛 卡尔积,根据where子句中的谓词进行关系代数的选择运算,然后将结果投影到 select子句的属性上。最后的查询结果也是一个关系(表)。 2.2.1 select 子句 普通 select branch_name from loan 去重 select distinct branch_name from loan 保留重复 select all branch_name from loan 由于默认是保留重复的,因此不需要使用 all 关键字。 *表示所有属性 select * from loan select 子句允许+、-、*、/四则运算以及某些算术函数。 select amount*100 from loan 2.2.2 where 子句 where 子句使用逻辑运算符 and、or、not。使用表较运算符<、<=、>、>=、 =、 <>。 普通 select loan_number from loan where branch_name=’Perryridge’ and amount > 1200 between…and…比较运算符
select loan_number from loan where amount between 900 and 1200 2.2.3 from 子句 from 子句本身定义了子句中关系的笛卡尔积。 select customer_name, borrower.loan_number, amount from loan, borrower where borrower.loan_number=loan.loan_number 注意,from 子句后面只是跟着一些关系,既可以是数据库中已有的表名,也 可以是运算结果产生的临时关系如 select 语句返回的关系。 select * from (select avg(balance) as average_balance from account) 2.2.4 更名运算(as) as 可以出现在 select 子句和 from 子句中用来更改属性和关系的名字。 在 select 子句中更改属性名称 select customer_name, borrower.loan_number as loan_id, amount from loan, borrower where borrower.loan_number=loan.loan_number 在 from 子句中更改关系名称 “找出资产至少比位于 Brooklyn 的某一家支行高的支行名” select distinct T.branch_name from branch as T, branch as S /*将一个关系变成两个关系便于计算*/ where T.assets > S.assets and S.branch_city=’Brooklyn’ 其实现还可以用〉some 运算实现: select distinct branch_name from branch where assets >some (select assets from branch where branch_city=’Brooklyn’)
更改 select 语句返回的关系的名称和属性名 select branch_name, avg_balance from (select branch_name, avg(balance) from account group by branch_name) as branch_avg(branch_name, avg_balance) where avg_balance > 1000 2.2.5 字符串匹配(like) 通配符规则 % 任意子串(0-n 个字符) _ 任意一个字符 select customer_name from customer where customer_street like “%Main%” 2.2.6 排序(order by) 普通用法 select * from customer where customer_street like “%Main%” order by customer_name 指名排序方式 order by 默认使用升序排序。desc 表示降序,asc 表示升序。 select * from loan order by amount desc, loan_number asc 2.3 集合运算 SQL 在关系上的 union、intersect 和 except 运算相当于关系代数中的并、交
和差运算。注意与 select 运算不同,union、intersect 和 except 运算会自动去除重 复,即其默认结果实 distinct,而 select 默认结果是 all。 2.3.1 并运算(union) 将 depositor 和 loan 中的 customer_name 合并起来,若有重复只保留一份。 (select customer_name from depositor) union (select customer_name from loan) 保留重复则加 all,下面的 intersect、except 与此类似。 (select customer_name from depositor) union all (select customer_name from loan) 2.3.2 交运算(intersect) 取 depositor 和 loan 中都出现的 customer_name,若有重复只保留一份。 (select customer_name from depositor) intersect (select customer_name from loan) 保留重复值,此时会保留出现次数较少的。 (select customer_name from depositor) intersect all (select customer_name from loan)
分享到:
收藏