数据库复习

理论

关系模型

超码

​ K⊆R,K的值可以表示R中每一个元素(唯一标识),则K为R的超码,可以是一个属性,也可以是一个属性组

​ K是R的超码,K的任意子集也是R的超码

​ K中可能有无关属性

候选码

​ K为最小化的超码,则K为一个候选码

​ 候选码的任意一个子集都不能唯一标识一个记录(最小性)

主码

​ 某一个能唯一标识一条记录的最小属性集

​ 只能存在一个主码

外码

​ R1中的属性组A,在R2中为主码B,A为R1的外码

​ A在R1中的取值要参照R2

形式化关系查询语言

关系代数

基本运算
选择

​ 选择满足给定条件的元组

σp(r)

​ 查询Physics系教师:σ dept_name=“Physics”(instructor)

​ 查询Physics系且年薪高于90000的教师:

​ σ dept_name=“Physics” ^ salary>90000(instructor)

​ 查询Physics系或年薪高于90000的教师:

​ σ dept_name=“Physics” V salary>90000(instructor)

投影

​ 返回作为参数的那个关系的所有数据

​ 如果有重复数据,只返回一个

πA1,A2…Ak ® A1,A2,Ak为需要返回的属性名

​ 列出教师信息:πID,name,salary (instructor)

笛卡尔积

​ 结合任意两个关系的信息,两个关系里的所有元素都配对

r1×r2

​ instructor关系与teacher关系的笛卡尔积:instructor×teacher

​ 若出现有完全相同的元组,则要加上前缀,如instructor.ID,teacher.ID


​ 以下为表达式之间的运算

交运算

​ ∩(和选择内的交运算区分)

差运算

​ -

并运算

​ ∪(和选择内的并运算区分)

附加运算
连接运算

​ 筛选出两个关系中指定属性相同的元组

​ 将选择运算和笛卡尔积运算合并到一个运算中

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

​ 将instructor关系和teacher关系通过ID联系在一起

​ 内连接:等值连接(包括重复列)、自然连接(不包括重复列)

​ 外连接:左外连接(内连接+左边表中没有匹配的元组)、右外连接(内连接+右边表中没有匹配的元组)、全外连接(内连接+左右)

赋值

​ 通过一个代数表达式中的一部分赋值给临时的关系变量

​ ←

Physics←σ dept_name=“Physics”(instructor)

更名

​ ρx(E) 返回E的结果,用x命名(把E表命名为x)

​ ρx(A1,A2…An)(E) 把E表命名为x,且属性依次命名为A1,A2…An

关系演算

元组关系演算
域关系演算

数据库设计

需求分析

​ 通过详细调查现实世界要处理的对象,充分了解工作情况,明确用户需求,然后确定新系统的功能。

概念设计

ER图

逻辑设计

规范化理论

​ 实体:如学生,教师等

​ 属性:如姓名,学号等

​ 联系:一对一,一对多,多对一等

​ 映射基数:1:1,1:m,m:1

函数依赖

​ X→Y

平凡函数依赖:X决定Y,但是Y不在X中

非平凡函数依赖:↑反之

完全函数依赖:X中所有属性才能决定Y

部分函数依赖:↑反之

传递函数依赖:X→Y,Y→Z,Y,Z不被X包含,Z不被Y包含,Y!→X,则Z传递函数依赖X

范式

​ 数据库中关系是要满足一定要求的,满足程度不同的要求称之为不同范式

​ 规范化:一个低一级范式的关系模型通过模式分解,转化为若干高一级的范式关系模式,这个过程称为规范化

大题
求闭包

实践

SQL语言

DDL语言

CREATE

​ 创建数据库

CREATE DATABASE A(数据库名)

ALTER

​ 修改表中的字段或索引

ALTER TABLE A ADD B

ALTER TABLE A DROP B

ALTER TABLE A MODIFY B

​ A:数据库名

​ B:新列名称+新列数据结构

DROP

​ 删除数据库

DROP DATABASE A(数据库名)

DML语言

​ SQL不区分大小写

​ SQL允许在关系和查询中出现重复

INSERT

INSERT INTO A vales (‘B’,‘C’,)

​ A:表名

​ B、C:字符串加 ’ ’ ,数字不加

DELETE

DELETE FROM A(数据库名)

UPDATE

UPDATE A SET B

​ A:数据库名

​ B:执行语句

SELECT

SELECT A FROM B WHERE C

​ A:属性

​ B:关系

​ C:谓词

​ select允许重复,若要删除重复,可在select后加distinct

​ 语句可以不包含from后面的部分,结果为一列一行的表,内容为A

​ select语句可以含有运算符±*/等

WHERE

​ 跟在from后面

​ 允许使用逻辑连接词

​ 连接词运算对象可以包括比较运算符(<,>,=等)

​ select name from instructor where dept_name = ‘COMP’ and salary >7000

BETWEEN

​ 跟在where后

​ 表示筛选在区间内的元组

​ 工资在9000-10000:select * from instructor where salary between 9000 and 10000

多关系查询

​ 涉及到笛卡尔积运算

​ select * from instructor,teachers

​ select name,course_id from instructor,teachers where instructor.ID=teachers.ID and instructor.dept_name=‘a’

字符串运算

​ ==%==匹配任意字符串,随便多长

​ ==_==匹配单个字符

​ %ar%匹配含有ar的元组

​ _ _ _匹配三个字符的字符串

​ _ _ _%匹配至少含有三个字符的字符串

集合运算

​ 或:union

​ (select * from instructor where name = ‘a’)union(select * from section where semester = ‘spring’)

​ 与:intersect

​ (select * from instructor where name = ‘a’)intersect(select * from section where semester = ‘spring’)

​ 差:expect

​ (select * from instructor where name = ‘a’)expect(select * from section where semester = ‘spring’)

上述运算会自动删除重复项,若要保留,则使用:union all、intersect all、except all

聚集函数

​ avg(平均值)、min(最小值)、max(最大值)、sum(求和)、count(计数)

​ select avg(salary) from instructor where name=‘a’

​ count可以搭配distinct一起使用:count(distinct a)

分组聚集

group by

​ 放在where后

​ select dept_name from instructor where name=‘a’ group by dept_name

HAVING

​ 跟在group by后面

​ 作为group by的补充,对分组后的数据进行过滤

​ group by dept_name having avg(salary) > 4200 按平均工资大于4200的年薪分组

ORDER BY

order by A(属性)

​ 按照A排序,先group by 后order by

​ 默认升序,可在后面 + desc(降序)asc(升序)

​ 可对多个属性进行排序:order by dept_name decs,name(先按dept_name降序排序,同名则按name升序排序)

集合成员资格

​ 求交集:select name from instructor where name=‘a’ and course_id in (select course_id from section where year=‘2018’)

​ 求差集:select name from instructor where name=‘a’ and course_id not in (select course_id from section where year=‘2018’)

EXISTS

​ 与的另一种写法

​ select name from instructor where name=‘a’ and exists (select * from section where semester = ‘spring’)

e=‘a’ and course_id in (select course_id from section where year=‘2018’)

​ 求差集:select name from instructor where name=‘a’ and course_id not in (select course_id from section where year=‘2018’)

EXISTS

​ 与的另一种写法

​ select name from instructor where name=‘a’ and exists (select * from section where semester = ‘spring’)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值