第一章 引言
数据库管理系统是由一个互相关联的数据的集合和一组用以访问这些数据的程序组成。这个数据集合通常称为数据库
特定时刻存储在数据库中的信息的集合称为数据库的一个实例,而数据库的总体设计称为数据库模式
数据库结构的基础是数据模型,数据模型是一个描述数据,数据联系,数据语义以及一致性约束概念工具的集合。数据模型提供了一种物理层,逻辑层以及视图层数据库设计的方式
存储在数据库中的数据值必须满足某些一致性约束
数据库中实体通过属性集合来描述,例如name,salary可以描述instructor实体
联系是几个实体之间的关联,例如,member联系将一位教师和她所在的系关联在一起。同一类型的所有实体的集合称为实体集,同一类型的所有联系的集合称为联系集
第一部分--关系数据库
第二章--关系模型介绍
元组只是一组值的序列(或列表),在n个值之间的一种联系可以在数学上用关于这些值的一个n元组来表示,换言之,n元组就是一个有n个值的元组,它对应于表中的一行
在关系模型的术语中,关系用来指代表,元组用来代指行,属性指代表中的列
对于关系的每个属性,都存在一个允许取值的集合,称为该属性的域
域是原子的,不可再分的
空值是一个特殊的值,表示值未知或不存在
数据库模式
数据库模式是数据库的逻辑设计,数据库实例是给定时刻数据库中数据的一个快照
码
一个元组的属性值必须是能够唯一区分元组的,换句话说,一个关系中没有两个元组在所有属性上的取值都相同
超码是一个或多个属性的集合,这些属性的组合可以是我们在一个关系中唯一的标识一个元组
主码主要用来在一个关系中区分不同元组的候选码
外码:
模式图
一个含有主码和外码依赖的数据库模式可以用模式图
关系查询语言
查询语言是用户用来从数据库中请求获取信息的语言
在过程化语言中,用户执导系统对数据库执行一系列操作以计算出所需结果
在非过程化语言中,用户只需要描述所需信息,而不用给出获取该信息的具体过程
关系运算
第三章--SQL
SQL数据定义
基本属性
基本模式定义
create table
create table r
( A1,D1,
A2,D2,
....,
An,Dn,
<完整性约束1>,
...,
<完整性约束k> );
完整性约束:
not null:一个属性上的not null 约束表明在该属性上不允许空值,此约束把空值排除在该属性域之外
SQl 禁止破坏完整性约束的任何数据库更新
insert
insert into instructor
values (10211,'Smith' , 'Biology' , 66000);
delete 删除元组
delete from student;
drop 去掉关系
drop table r;
此命令从数据库中删除关于被去掉关系的所有信息,delete 保留关系r,但删除r中所有的元组。drop 不仅删除 r 的所有元组,还删除 r 的模式,一旦 r 被去掉,除非用 create table 命令重建 r ,否则没有元组可以插入 r 中
alter table 增加属性
alter table r add A,D;
关系中的所有元组在新属性上的取值被设为 null,r 为现有关系的名字,A是待添加属性的名字,D 是待添加属性的域
alter table r drop A;
从关系中去掉属性,其中 r 是现有关系的名字,A 是关系的一个属性的名字
SQL 查询的基本结构
SQL 查询的基本结构由三个子句构成:select,from,where
单关系查询
强行删除重复 可以在 select 后加上关键字 distinct
select distinct dept_name
from instructor;
SQL 允许我们使用关键字 all 来显式指明不去除重复
select 子句还可带含有 +,-,*,/ 运算符的算术表达式,运算对象可以是常数或元组的属性
where:
多关系查询
通过 from 子句定义了一个在该子句中所列出关系的笛卡尔积,它可以用集合理论来形式化地定义,但最好通过下面的迭代过程来理解:
此结果关系具有来自 form 子句中所有关系的所有属性
自然连接
自然选择运算作用于两个关系,并产生一个关系作为结果,自然连接只考虑那些在两个关系模式中都出现的属性上取值相同的元组对。
附加的基本运算
更名运算
as 子句
old-name as new-name
as 子句既可以出现在 select 子句中,也可以出现在 from 子句中
字符串运算
转义字符
SQL 允许定义转义字符,在 like 比较运算中使用 escape 关键词来定义转义字符
select 子句中的属性说明
星号 * 可以用在 select 子句中标是“所有的属性”
排列元组的显示次序
order by 子句可以让查询结果中元组按排序顺序显示
desc 表示降序 asc 表示升序
where 子句谓词
between 比较运算符来说明一个值是介于两者之间,左闭右闭
集合运算
并运算
union 运算自动去除重复 union all 保留所有重复
交运算
intersect 运算自动去除重复 interscet all 保留所有重复
差运算
找出在2009年秋季学期开课但不在2010年春季学期开课的所有课程,可以这样写:
except 运算 从其第一个输入中输出所有不出现在第二个输入中的元组
空值
如果算数表达式的任一输入为空,则该算术表达式(涉及诸如 + - * /)结果为空
聚集函数
聚集函数是以值得一个集合(集或多重集)为输入,返回单个值的函数,SQL提供了五个固有聚集函数:
- 平均值:avg
- 最小值:min
- 最大值:max
- 总和:sum
- 计数:count
sum 和 avg 的输入必须是数字集,但其他运算符还可作用在非数字数据类型的集合上,如字符串
基本聚集
找出 Computer Science 系教师的平均工资,给结果关系的属性一个名字:
分组聚集
我们不仅希望聚集函数作用在单个元组集上,而且也希望将其作用在一组元组集上
group by 子句中给出的一个或多个属性是用来构造分组的
在 group by 子句中所有属性上取值相同的元组将被分在一个组中
having 子句
having 子句中的谓词在形成分组后才起作用,因此可以使用聚集函数