关系型数据库 期末复习(未完

绪论

概念间的关系

数据->数据库->数据库管理系统->数据库系统

数据:存储在某种媒体上可加以鉴别的符号资料。即:对现实世界中客观事物的符号表示(描述事物的符号记录),可以是数值数据,也可以是非数值数据,如声音、图像等。
数据库(DB) :长期储存在计算机内的有组织的、可共享的相关数据的集合。
数据库管理系统:DBMS是介于用户与操作系统之间的一层数据管理软件。为用户或应用程序提供访问DB的方法,包括DB的建立、查询、更新及各种数据控制。DBMS是基于某种数据模型。
数据库系统 :数据库系统(DBS)通常是指带有数据库的计算机应用系统。包括数据库、相应的硬件、软件和各类人员。
数据库技术 :数据库技术是研究数据库的结构、存储、设计、管理和使用的一门软件学科;是一门综合性较强的学科。

数据库的历史

人工管理阶段 -> 文件系统阶段 -> 数据库系统阶段->高级数据库系统阶段

数据库系统结构:三级模式、二级映射

  • 外模式:用户
  • [概念]模式
  • 内模式:数据库的物理存储

信息和数据

信息抽象于现实,可用E-R图描述,包括:

  • 实体 entity :具体的事物 或 抽象概念 或 他们之间的联系
  • 实体集 entity set
  • 属性 attribute
  • 属性域 domain :属性的取值范围
  • 码 key :唯一标识实体的属性(集)
  • 实体型 entity type
  • 联系 relationship
    不同实体型之间有三种联系:1:1,1:n,m:n (可以没有)

数据由信息转化,对应计算机,包括:

  • 字段 field 或数据项 data item:标记实体的属性
  • 记录 record
  • 记录型
  • 文件
  • 码 key

数据模型

分类:层次模型 hierarchical model ,网状模型 network model,关系模型 relational model ,面向对象数据模型 object oriented data model ,对象关系数据模型,半结构化数据模型等
操作:增删改查
数据结构

  • 码、主关键字 primary key:唯一标识
  • 域 domain
  • 行=元组 tuple =记录
  • 列=属性 attribute =字段
  • 主属性包括主码、候选码
  • 分量

完整性约束:实体完整性、参照完整性、用户定义完整性(用户自定义域)

关系模型

描述:关系名(属性1,属性2,……属性n)
关系的每一个分量必须是不可分的数据项

数据结构

  • 域 domain
    值域,表示属性的取值范围
    域中所包含的值的个数称域的基数(m)
  • 笛卡尔积 cartesian product
    D 1 × D 2 = { ( d 1 , d 2 ) ∣ d i ∈ D i } D_1\times D_2=\{(d_1,d_2)|d_i\in D_i\} D1×D2={(d1,d2)diDi}
    ( d 1 , d 2 ) (d_1,d_2) (d1,d2)[二]元组,其中的每一个值叫做分量
    笛卡尔积的基数是各域的基数之积
  • 关系 relation
    笛卡尔积的子集叫在域D1,…Dn上的关系,表示为 R ( D 1 , D 2 , . . . , D n ) R(D_1,D_2,...,D_n) R(D1,D2,...,Dn)
    R是关系的名字,n是关系的
    若关系中,某一属性组的值能唯一地标识一个元组,而其子集不能,则称候选码,候选码的诸属性称为主属性。候选码可只包含一个属性,也可能包含全部属性,此时称为全码
    从候选码中选出一个来作为主码,主码也可以是多个属性共同构成的。
    外部码,在本关系中不是码,但是其他某一关系的码。
    笛卡尔积没有意义,其子集才有意义。关系必须是有限集合。
    关系可有:基本表(实际)、查询表、视图表(虚表)

关系完整性

  • 实体完整性 entity integrity
    主属性不能取空
  • 参照完整性 referential integrity
    属性F是关系R的属性但不是R的码,K是关系S的主码,F与K定义在同一个域上(相对应),则F是R的外部码,R是参照关系,S是被参照关系(目标关系),R中任一元组在F上的值为:F=S中某个元组的K值 或 空值
  • 用户定义完整性 user-defined integrity
    用户自定义域

关系操作

增删改查
查询包括:选择投影、连接、除、、交、笛卡尔积
标粗的是基本操作,其他操作可以用五种基本操作来定义和导出

语言

  • 关系代数语言 relational algebra 查询 ISBL
  • 关系演算语言 relational calculus 查询 元组演算:ALPHA 域演算:QBE
  • 关系数据库标准语言 SQL(structured query language) 更加强大

只需要给出查询,不需要考虑如何实现查询

关系代数语言

只能做一部分查询操作
集合运算:

  • 并union:R和S具有相同目n,且相应属性取自同一个域 R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } R\cup S=\{t|t\in R\vee t\in S\} RS={ttRtS}
  • 差except:R和S具有相同目n,且相应属性取自同一个域 R − S = { t ∣ t ∈ R ∧ t ∉ S } R- S=\{t|t\in R\wedge t\notin S\} RS={ttRt/S}
    从R中减去和S相同的
  • 交intersection:R和S具有相同目n,且相应属性取自同一个域 R ∩ S = { t ∣ t ∈ R ∧ t ∈ S } R\cap S=\{t|t\in R\wedge t\in S\} RS={ttRtS}
  • 广义笛卡尔积 cartesian product:连接

引入表示符号:

  • 关系 R ( A 1 , A 2 , . . . , A n ) R(A_1,A_2,...,A_n) R(A1,A2,...,An)
    t ∈ R , t\in R, tR,其中t是元组
    t [ A i ] t[A_i] t[Ai]表示元组t中的分量Ai
    A是属性列/域列
    A ˉ \bar{A} Aˉ表示从关系中去掉A属性后剩余的属性组

  • R是n目关系,S是m目关系, t r ∈ R , t s ∈ S t_r\in R,t_s\in S trR,tsS
    $\stackrel\frown{t_rt_s} $是元组的连接 concatenation,是一个(n+m)列的元组

  • 给定关系R(X,Z),XZ为属性组,定义当t[X]=x时,x在R中的象集images set是 Z x = { t [ Z ] ∣ t ∈ R , t [ X ] = x } Z_x=\{t[Z]|t\in R,t[X]=x\} Zx={t[Z]tR,t[X]=x},它表示R中属性组X上值为x的各元组在Z上分量的集合

关系运算:

  • 选择运算 selection/restriction:选择元组 σ F ( R ) = { t ∣ t ∈ R ∧ F ( t ) = t r u e } \sigma_F(R)=\{t|t\in R\wedge F(t)=true\} σF(R)={ttRF(t)=true}
    F是一个公式,由逻辑运算符 ∨ ∧ ¬ \vee \wedge \neg ¬连接算数表达式 > < ≥ ≤ = ≠ > < \ge \le = \ne ><≥≤==构成
  • 投影运算projection:选择列 π A ( R ) = { t [ A ] ∣ t ∈ R } \pi_A(R)=\{t[A]|t\in R\} πA(R)={t[A]tR},取消重复行
  • 连接运算join: R ⋈ F S R\underset{F}{\Join} S RFS
    • 等值连接:F中算数表达式是=, R ⋈ A = B S R\underset{A=B}{\Join} S RA=BS
    • 自然连接(常用且默认):进行比较的分量必须是相同的属性,并且在结果中去掉重复的属性 R ⋈ S R\underset{}{\Join} S RS,会有悬浮元组消失
    • 半连接 :自然连接后仅保留对R属性的投影
    • 左外连接:若S中找不到匹配的元组,则不匹配的元素用空值匹配
    • 右外连接:若R中找不到匹配的元组,则不匹配的元素用空值匹配
    • 全外连接:所有不匹配的元组均用空值匹配
  • 除:R(X,Y),S(Y,Z), R ÷ S = { t r [ X ] ∣ t r ∈ R ∧ Y X ⊇ π Y ( S ) } R\div S=\{t_r[X]|t_r\in R\wedge Y_X\supseteq \pi_Y(S)\} R÷S={tr[X]trRYXπY(S)}
    X的象集Yx包含S在Y上的投影

运算之间的转换:
R ∩ S = R − ( R − S ) 或 S − ( S − R ) R\cap S=R-(R-S)或S-(S-R) RS=R(RS)S(SR)
R ÷ S = π X ( R ) − π X ( ( T ∗ π Y ( S ) − R ) R\div S=\pi_X(R)-\pi_X((T*\pi_Y(S)-R) R÷S=πX(R)πX((TπY(S)R)
此处应看ppt

关系演算语言

元组关系演算语言 ALPHA语言

可以做所有查询操作、以及增删改(更新)操作
基本格式:操作语句 工作空间名(表达式):操作条件

查询操作:GET

GET W (SC.CNO)
GET W (S.SNO,S.Sage):S.Sdept=‘CS’ DOWN S.Sage DOWN表降序排序
GET W(1)(S.SNO) 取一个符合条件的元组

  • 元组变量:简化关系名、使用量词

RANGE STUDENT X

GET W (X.SNAME):X.Sdept=‘CS’

  • 存在量词:必须使用元组变量

RANGE SC X
GET W (S.SNAME): ∃ \exist X(X.SNO=S.SNO ∧ \wedge X.CNO=‘2’)

可以变为前束范式的形式

  • 全程量词
    查询不选1号课程的学生的名字

RANGE SC SCX
GET W(S.Sname): ∀ \forall SCX(SCX.SNO!=S.SNO ∨ \vee SCX.CNO!=‘1’)

还可以用 ¬ ∃ \neg\exist ¬∃,两种量词组合

  • 用蕴含implication的检索
    查询最少选修了201215122学生所选课程的学生学号
    RANGE Course CX
    SC SCX
    SC SCY
    GET W(S.SNO): ∀ C X ( ∃ S C X ( S C X . S N O = ′ 20121512 2 ′ ∧ S C X . C N O = C X . C N O ) ⇒ ∃ S C Y ( S C Y . S N O = S . S N O ∧ S C Y . C N O = C X . C N O ) ) \forall CX(\exist SCX(SCX.SNO='201215122'\wedge SCX.CNO=CX.CNO)\Rightarrow \exist SCY(SCY.SNO=S.SNO\wedge SCY.CNO=CX.CNO)) CX(SCX(SCX.SNO=201215122SCX.CNO=CX.CNO)SCY(SCY.SNO=S.SNOSCY.CNO=CX.CNO))
  • 聚集函数
    一些简单的计算,如COUNT,TOTAL,MAX,MIN,AVG
    GET W(COUNT(S.Sdept)) COUNT会自动排除重复值

更新操作

  • 修改
    HOLD是带并发控制的GET
    更新必须先用HOLD读入,然后用宿主语言修改,然后UPDATE送回
    主码不能修改
  • 插入
    宿主语言建立新元组,然后用PUT插入关系中
  • 删除
    用HOLD读入到工作空间,用DELETE删除

域关系演算语言 QBE语言

SQL语言

有交互式和嵌入式,非常好的语言

常用

  • 数据类型
    字符型:CHAR(n),VARCHAR(n)
    数字型:INT,SMALLINT,REAL
    日期型:DateTime,SmallDateTime
    其他:Image
  • 函数
ABS(X),SQRT(X),RAND(X),LOG(X)
LENGTH(X),LOWER(X),UPPER(X),SUBSTRING(expression,start,length)
COUNT,MAX,MIN,AVG,SUM

日期函数
转换函数
其他函数

查询语句

select [all|distinct] [表名.]{*|列名|表达式[as 新列名]}--投影
[into :主变量1 [,:主变量2]...]
from 表名[表别名] --表->内存
where 条件表达式|子查询 --选择元组
group by 列名1,... --分组
	having 分组表达式
	[union|intersect|except]select ... from ... --查询结果的集合运算
order by 列名|列序号[asc|desc],... --排序输出

单表查询

select
  • * 列全选
  • Sdept,Sname 选择系和姓名
  • 2020-Sage birthday更名输出
  • lower(Sdept) 小写字母输出
  • distinct消除重复行,缺省为all
  • round(sal/22.0)计算后四舍五入
where
  • 比较< <= > >= = !=
  • 确定范围between a and b ,not between a and b
  • (not) in如:sedept in ('ie','cs','ma')
  • (not) like字符匹配 %匹配任意字符串 _匹配单个字符(英文),如需使用通配符,需加\转义,如cname like '%\_%' escape'\'
  • is (not) null
  • and or not
group by

将查询结果按照列分组,值相等的为一组,一个分组以一个元组的形式出现,只有出现在group by中的属性,才可出现在select后面
组函数COUNT,MAX,MIN,AVG,SUM可以用在select后,也可用在having的分组表达式中,having用于筛选分出的组

order by

desc降序,asc升序
空值看作最大值

连接查询

多表连接:

where s.sno=sc.snowhere sal between losal and hisal

单表连接:

用表别名把一个表定义为两个不同的表,如:求比本部门职工工资低的部门负责人

select w.ename,w.sal,m.ename,m.sal
from emp w,emp m
where w.mgr=m.empno and w.sal>m.sal
外连接:

在连接条件的某侧加上*或+,表示该侧对应的表中可形成一个各数据项均为空值的万能替代行,用来与另一侧对应表中所有不满足条件的元组连接,对应右外连接、左外连接、全外连接,如:where dept.deptno=emp.deptno(*)
右外连接:

select ... 
from  dept right join` emp on dept.deptno=emp.deptno
select ...
from dept full jion emp on dept.deptno=emp.deptno
复合条件连接:

where中还有其他限制条件

嵌套查询

where中嵌套select语句块,外面是父查询,里面是子查询,子查询中不允许使用order by

返回单个值的子查询:
select sname,sage
from s
where sdept=
	(select sdept 
	from s
	where sname='zhangsan');

可以用嵌套查询做,也可以用单表连接做,但是效率不一样

返回一组值的子查询:

in表等于 或者 < any[=max (sage)] 比某一小 或者 比全部小<all

多重子查询

反复嵌套
from里面也可以放子查询,+as搞成新表

select sno,avg_g
from (select sno,avg(all grade)
		from sc
		group by sno)
	as newr(sno,avg_g)
where avg_g>70;
带有exists的相关子查询

相关子查询:子查询的查询条件依赖于外层父查询的某个属性值
带exists的子查询不返回数据,只返回true或false

select sname
from s
where exists
	(select *
	from sc
	where s.sno=sc.sno and cno='c1');

不关心子查询的具体内容,所以用*
反过来用not exists

集合操作

属性个数必须一致,对应类型必须一致,属性名要无关,缺省为distinct
一个查询得到的结果{集合操作}另一个查询得到的结果
union并
交用where里and做
not in差

更新语句

插入 insert

插入单个元组

insert into 表名[(列名1...)] --如果插入元组的全部列值,可省略列名
values (1,...)

插入子查询的的结果

insert into 表名 [(列名1,...)](子查询)

删除 delete

delete from 表名
[where 条件] --不写条件则清空表

只能删元组,不能删属性
只对单表起作用
条件可以带子查询

修改 update

update 表名
set 列名=表达式,... 或者(列名,...)=(子查询)
where 条件

数据定义

建表 create

create table 表名(
列名 类型(长度) [not null]
[default {常量|系统变量|null}]
[列约束],...
)
[primary key (列名,...)]
[foreign key (列名,...) references 表名(列名,...]
[check 条件];--此处可以改成 as 子查询

删表 drop

drop table 表名 
[cascade|restrict];

cascade表示连同视图、完整性约束一起撤销
restrict 无引用时才可撤销

修改

alter table 表名
[add 新列名 类型(长度) [not null][列约束],...]
[modify 旧列名 类型(长度)]
[drop 列约束]
[rename 旧表名 to 新表名];
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值