数据库期末复习:SQL语句范式的定义和判断ER图转关系模式

Posted karshey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库期末复习:SQL语句范式的定义和判断ER图转关系模式相关的知识,希望对你有一定的参考价值。

文章目录

SQL语句

查询select

学生表s,课程表c,学生选课表sc。

查询被学生(学号为A)选修的课程有几个?

select count(cno) from sc
where sno='A'

查询年龄在18-19之间的学生信息。

select * from s
where sage between 18 and 19

查询姓刘的同学的信息。

select * from s
where sname like '刘%'

如果名字是两个字且姓刘,则为’刘_'。

查询没有先修课的课程信息。

select * from c
where cpno is null

求各门课学生的平均成绩,显示课程号及相应的平均成绩

select cno,avg(grade) from sc
group by cno

查询有2个以上学生选修的课程的课程号。

select cno from sc
group by cno
having count(sno)>2

group by了就不能where 要having

查询学生选修课程的情况要求,显示学生名、课程名、成绩(三表查询)。

select sname,cname,grade from s,c,sc
where s.sno=sc.sno and c.cno=sc.cno

查询选修了全部课程的学生姓名

select sname from s//这里是全选课的
where not exists
(
	//这里是没选课的
	select * from c
	where not exists
	(
		//这里是选了课的
		select * from sc
		where s.sno=sc.sno and c.cno=sc.cno
	)
)

其他

创建表dept_age,包含2个字段:系别和平均年龄。按系分组求平均年龄,再把系名和平均年龄存入新表中。

create table dept_age
(
	dept char(20) primary key,/*是主码*/
	avg-age smallint
)

如果是外码,参照的是A表中的dept,则要这样:dept char(20) references A(dept)

删除S表。

drop table s

将女生的年龄减去1岁。

update sage     /*表名*/
set sage=sage-1  /*对属性sage的操作*/
where ssex='女'

将信息科学系的全体学生成绩设为100分。

update sc
set grade=100
where sno in
(
	select sno from s
	where dept='信息科学'
)

删除200215121学生的选课信息。

delete from sc
where sno='200215121'

将成绩表中计算机科学系的学生信息删除。

delete from sc
where sno in
(
	select sno from s
	where dept='计算机科学'
)

建立视图view grade,内容为:学生姓名、课程名、成绩。

create view as select 
sname,cname,grade
from s,c,sc
where s.sno=sc.sno and c.cno=sc.cno

范式的定义和判断

步骤

  1. 求闭包(左边元素的组合)
  2. 候选码:当上一步的左边元素的组合的闭包可以推出所有元素的时候,它就是候选码
  3. 主属性:组成候选码的属性就是主属性
  4. 非主属性:不是主属性的就是非主属性
  5. 判断是哪个范式:NF,2NF,3NF,BCNF

NF:每个元素不可分割。
如:学生(姓名,性别,家庭成员)——其中姓名和性别是不可分割的(如性别:要么男要么女),但家庭成员是多个元素的mixed(爸妈姐妹兄弟),所以“学生”不是NF。

1NF VS 2NF——2NF:不存在非主属性对候选码的部分依赖。
翻译:在候选码中选出一部分,它可以推出非主属性。
如:
有候选码BC,非主属性D。若有B->D或C->D,则这就是“非主属性对候选码的部分依赖”,所以它不满足2NF,只会是NF。

2NF VS 3NF——3NF:不存在非主属性对候选码的传递依赖。
如:
有候选码AB,且AB->C,C->D,那么其实AB->D,即D传递依赖于候选码AB,则它不满足3NF,最多是2NF。

3NF VS BCNF——BCNF:不存在主属性对候选码的部分依赖和传递依赖

一些例题

例题1
R(A,B,C),F=AB->C。

解:
候选码:AB。
主属性:A、B。
非主属性:C。

是NF,2NF(不存在A->C或B->C),3NF(不存在非主属性对候选码的传递依赖),BCNF(不存在主属性对候选码的部分依赖或传递依赖)。

所以是一个BCNF

例题2:
R(A,B,C),F=B->C,AC->B。

解:
候选码:AB、AC。
主属性:A、B、C
非主属性:无。(所以它最少就是一个3NF)

对于B->C,C是主属性,B是候选码的一部分,存在主属性对候选码的部分依赖,因此不是BCNF。

所以是一个3NF

例题3:
R(A,B,C),F=B->C,B->A,A->BC。

候选码:A、B
主属性:A、B
非主属性:C

对于B->C,这是直接依赖(因为候选码是B,若候选码是BD,则B是BD的一部分,那就是部分依赖了),所以是2NF。
不存在非主属性对候选码的传递依赖,是3NF。
不存在主属性对候选码的部分/传递依赖,是BCNF。

所以是BCNF
注意:
A->B->A不是传递依赖。
若要有部分依赖,则候选码不能是单元的。(此题候选码就是单元的)

例题4:
R(A,B,C),F=A->C,A->B。

解:
候选码:A。
主属性:A。
非主属性:B、C。

答:BCNF

小技巧:
当一个关系是二元关系组时,则它就是一个BCNF。

对于此题,F=A->C,A->B可以合成为A->BC,这就是一个二元关系组。

例题5:
R(A,B,C,D),F=A->C,AD->B。

解:
候选码:AD
主属性:A、D
非主属性:B、C

对于A->C,是非主属性对候选码的部分依赖,故不符合2NF。
NF

例题6:
R(A,B,C),F=A->C,BC->D。

解:

如何求候选码可以看这里:第一步,左边元素的组合
候选码:AB
主属性:A、B
非主属性:C、D

对于A->C,是非主属性对候选码的部分依赖,则不满足2NF,则是NF

ER图转关系模式

下划线(直线)是主码,波浪线是外码。

有1:1、1:n、n:m三种对应关系。
1:1
任选一个属性添加另一个的主码即可。

1:n
在n端加上1端的主码——这是n端的外码。
若关系(三角形)上也有属性,则把它加到n端的属性上。

n:m
关系转换成一个实体,其中的属性是两端的主码,他们共同是这个实体的主码。画下划线+波浪线。

视频中的例题:

关系模式:

下面截图的理论和例题来自:浅析如何把ER模型转换为关系模式
理论

例题

解:

其他例题:案例讲解如何将ER图转化为关系模型

参考资料

查询语句例题
其他语句例题
范式的定义和判断
ER图转关系模式
数据库系统原理------ER图转化成关系模式

以上是关于数据库期末复习:SQL语句范式的定义和判断ER图转关系模式的主要内容,如果未能解决你的问题,请参考以下文章

mysql期末数据库复习指南(《数据库系统概率》知识点总结,数据库系统原理,数据库设计课程复习)

mysql期末数据库复习指南(《数据库系统概率》知识点总结,数据库系统原理,数据库设计课程复习)

ER 图转 SQL 查询

Oracel期末复习知识点——背完这33题想挂都难

大数据存储技术期末复习(自用)

sql复习