数据库期末复习知识点:(仅供参考)

数据库期末复习知识点:

  • 一运用SQL
    • 基本sql语句
    • 授权sql语句:
    • 实体完整性sql语句:
  • 二 ER
    • 画出ER图,并转换成关系模式。
  • 三、范式
    • 范式
    • 存储结构

一运用SQL

基本sql语句

(1)设教学数据库中有三个关系:
学生关系 S(S#,SNAME,AGE,SEX)
选课关系 SC(S#,C#,GRADE)
课程关系 C(C#,CNAME,TEACHER)

(1)下面用SQL语句实现下面每个查询查询学习课程号为C2的学生学号与成绩。

SELECT S#,GRADE 
FROM SC   
WHERE C#=‘C2’

(2)查询学习课程号为C2的学生学号与姓名。

SELECT S.S#,SNAME
FROM S,SC
WHERE S.S#=SC.S# AND C#=‘C2’SELECT S#,SNAME 
FROM S 
WHERE S#  IN
(SELECT S# FROM SC    
WHERE C#=‘C2’)

(3)查询选修课程名为MATHS的学生学号与姓名。

SELECT S.S#,SNAME
FROM S,SC,C
WHERE S.S#=SC.S# AND SC.C#=C.C# 
AND CNAME=‘MATHS’
或 SELECT S#,SNAME 
FROM S 
WHERE S# IN
(SELECT S# FROM SC 
WHERE C#  IN
(SELECT C# FROM C 
WHERE CNMAE=‘MATHS’))

(4)查询选修课程号为C2或C4的学生学号。

SELECT S#
FROM SC
WHERE C#=‘C2’ OR C#=‘C4’

(5)查询不学C2课的学生姓名与年龄。

SELECT SNAME,AGE
FROM S
WHERE S# NOT IN(SELECT S# 
FROM SC
WHERE C#=‘C2’)

(6)统计有学生选修的课程门数。

SELECT COUNT(DISTINCT C#)
FROM SC

(7)求选修C4课程的女学生的平均年龄。

SELECT AVG(AGE)
FROM S
WHERE SEX=‘女’ AND  S# IN
(SELECT S#  
FROM SC 
WHERE C#=‘C4’)

(8)求刘老师所授课程的每门课程的平均成绩。

SELECT C.C#,AVG(GRADE)
FROM C,SC
WHERE C.C#=SC.C# AND TEACHER=‘LIU’
GROUP BY C.C#SELECT C#,AVG(GRADE)
FROM SC
WHERE C# IN
(SELECT C# FROM C WHERE  
TEACHER=‘LIU’)
GROUP BY C#

(9)统计每门课程的学生选修人数(超过10人的课程才统计)。要求显示课程号和人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。

SELECT C#,COUNT(S#)
FROM SC
GROUP BY C# HAVING COUNT(*)>10
ORDER BY COUNT(S#) DESC,C#

(10)检索学号比WANG同学大,而年龄比他小的学生姓名。

SELECT SNAME
FROM S
WHERE S#>ALL(SELECT S# 
FROM S 
WHERE SNAME=‘WANG’)
AND AGE<ALL(SELECT AGE 
FROM S WHERE
SNAME=‘WANG’)

(11)在SC表中检索成绩为空值的学生学号和课程号。

SELECT S#,C#
FROM SC
WHERE GRADE IN NULL

(12)检索姓名以L打头的所有学生的姓名和年龄。

SELECT SNAME,AGE
FROM S
WHERE SNAME LIKE’L%

(13)求年龄大于女同学平均年龄的男学生姓名和年龄。

SELECT SNAME,AGE
FROM S
WHERE SEX=‘男’ AND AGE>(SELECT AVG(AGE)
FROM S
WHERE SEX=‘女’)

(14)求年龄大于所有女同学年龄的男学生姓名和年龄。

SELECT SNAME,AGE
FROM S
WHERE SEX=‘男’ AND AGE>ALL(SELECT AGE 
FROM S
WHERE SEX=‘女’)SELECT SNAME,AGE
FROM S
WHERE SEX=‘男’ AND AGE>
(SELECT MAX(AGE)
FROM S
WHERE SEX=‘女’)

(1)往关系C中插入一个课程元组(‘C8’,‘VC++’,‘BAO’)

INSERT INTO C
VALUES(‘C8’,’VC++,’BAO’)

(2)在SC中删除尚无成绩的选课元组。

DELETE
FROM SC
WHERE GRADE IN NULL

(3)把选修LIU老师课程的女同学选课元组全部删去。

DELETE 
FROM SC
WHERE S# IN(SELECT S# FROM S WHERE SEX=‘F’)
AND C# IN(SELECT C# FROM C WHERE TEACHER=‘LIU’)

(4)把MATHS课不及格的成绩全改为60.

UPDATE SC
SET GRADE=60
WHERE GRADE<60 AND
C# IN(SELECT C# 
FROM C      
WHERE CNAME=‘MATHS’)

(5)把低于所有课程总平均成绩的女同学成绩提高5%。

UPDATE SC
SET GRADE=GRADE*1.05
WHERE S# IN(SELECT S# FROM S WHERE SEX=‘F’)
AND  GRADE<(SELECT AVG(GRADE) FROM SC )

(6)在表SC中修改C4课程的成绩,若成绩小于70分时提高5%,若成绩大于70分时提高4%。

UPDATE SC
SET GRADE=GRADE*1.05
WHERE GRADE<=70
UPDATE SC
SET GRADE=GRADE*1.04
WHERE GRADE>70

(7)在表SC中,当某个成绩低于全部课程的平均成绩时,提高5%.

UPDATE SC
SET GRADE=GRADE*1.05
WHERE GRADE<(SELECT AVG(GRADE) FROM  SC)

授权sql语句:

1.把查询student 表的权限授给用户u1。

grant select 
on table student
to u1;

2.把对student表和course表的全部操作权限授予u2和u3。

grant all privileges 
on table student,course 
to u2,u3;

3.把对表SC的查询权限授予所有用户。

Grant select 
on table sc 
to public;

4.把查询student表和修改学生学号的权限授给u4。

Grant update(sno) ,select 
on table student
To u4.

5.把对表sc的insert权限授予u5用户,并允许将此权限在授予其他用户。

Grant insert
On table sc
To u5
With grant option

6.把用户u4修改学生学号的权限收回。

Revoke update(sno)
On table student
From u4.

7.收回所有用户对SC表的查询权限。

Revoke select
On table sc
From public.

8.把用户u5对SC表的insert权限收回。

Revoke insert
On table sc
From u5 cascade(级联,由于u5将对sc表的insert授予了u6...所以这里要一起收回,否则系统将拒绝执行该命令).

实体完整性sql语句:

1.建立部门表dept,要求部门名称dname列取值唯一,部门编号deptno列为主码。

Create table dept(deptno int(2),
dname varchar(9) unique not null,
primary key(deptno)
);

2.Student 表中ssex只允许取”男” or ”女”。

Create table student(sno char(9) primary key,
sname char(8) not null,
ssex char(2) check(ssex in(‘男’,’女’))
); 

3.SC表的grade的值应该在0到100之间。

Create table sc(sno char(9),
Cno char(4),
Grade int(10) check (grade>=0 and grade <=100),
Primary key(sno),
Foreign key(sno) references student(sno),
Foreign key(cno) references course(cno)
);

二 ER

画出ER图,并转换成关系模式。

1.设某商业集团数据库中有三个实体集。
一是“仓库”实体集,属性有仓库号、仓库名和地址等;
二是“商店”实体集,属性有商店号、商店名、地址等;
三是“商品”实体集,属性有商品号、商品名、单价。
仓库与商品之间存在“库存”联系,每个仓库可存储若干种商品,每种商品存储在若干仓库中,库存有个“库存量”、“存入日期”属性;
商店与商品之间存在着“销售”联系,每个商店可销售若干种商品,每种商品可在若干商店里销售,每个商店销售一种商品有月份和月销售量两个属性;
仓库、商店、商品之间存在一个三元联系“供应”,反应了把某个仓库中存储的商品供应到某个商店,此联系有月份和月供应量两个属性。
(1)根据描述,绘制相应的E-R图,并直接在E-R图上注明实体名、属性、联系类型;
(2)将E-R图转换成关系模型,画出相应的数据库模型图,并说明主键和外键。
数据库期末复习知识点:(仅供参考)_第1张图片
(2)E-R图可转换成6个关系模式:
仓库(仓库号,仓库名,地址)
商品(商品号,商品名,单价)
商店(商店号,商店名,地址)
库存(仓库号,商品号,日期,库存量)
销售(商店号,商品号,月份,月销售量)
供应(仓库号,商店号,商品号,月份,月供应量)

2.设有如下实体:
学生:学号、单位、姓名、性别、年龄、选修课程名
课程:编号、课程名、开课单位、任课教师号
教师:教师号、姓名、性别、职称、讲授课程编号
单位:单位名称、电话、教师号、教师名
上述实体中存在如下联系:
一个学生可选修多门课程,一门课程可为多个学生选修;
一个教师可讲授多门课程,一门课程可为多个教师讲授;
一个单位可有多个教师,一个教师只能属于一个单位。
试完成如下工作:
(1)分别设计学生选课和教师任课两个局部信息的结构E-R图。
(2)将上述设计完成的E-R图合并成一个全局E-R图。
学生选课局部E-R图
数据库期末复习知识点:(仅供参考)_第2张图片
教师任课局部E-R图
数据库期末复习知识点:(仅供参考)_第3张图片
合并的全局E-R图
数据库期末复习知识点:(仅供参考)_第4张图片
3.某医院病房管理系统中,包括四个实体型,分别为:
科室:科名,科地址,科电话
病房:病房号,病房地址
医生:工作证号,姓名,职称,年龄
病人:病历号,姓名,性别,主管医生
且存在如下语义约束:
①一个科室有多个病房、多个医生,一个病房只能属于一个科室,一个医生只属于一个科室;
②一个医生可负责多个病人的诊治,一个病人的主管医生只有一个;
③一个病房可入住多个病人,一个病人只能入住在一个病房。
注意:不同科室可能有相同的病房号。
完成如下设计:
(1)画出该医院病房管理系统的E-R图;
(2)将该E-R图转换为关系模型;(要求:1:1和1:n的联系进行合并)
(3)指出转换结果中每个关系模式的主码和外码。
数据库期末复习知识点:(仅供参考)_第5张图片
(2)转化后的关系模式如下:
科室(科名,科地址,科电话)
病房(病房号,科名,病房地址)
医生(工作证号,姓名,职称,年龄,科名)
病人(病历号,姓名,性别,主管医生,病房号,科名)
(3)每个关系模式的主码、外码如下:
科室:主码是科名;
病房:主码是病房号,外码是科名;
医生:主码是工作证号,外码是科名;
病人:主码是病历号,外码是科名十病房号。
4.学校中有若干系,每个系有若干班级和教研室,每个教研室有若干教员,其中有的教授和副教授每人各带若干研究生;每个班有若干学生,每个学生选修若干课程,每门课可由若干学生选修。请用 E 一 R 图画出此学校的概念模型。
数据库期末复习知识点:(仅供参考)_第6张图片
各实体属性为:
系:系编号,系名
班级:班级号,班级名
教研室:教研室号,教研室
学生:学号,姓名,学历
课程:课程号,课程名
教员:职工号,姓名,职称
联系的属性:“选修”的属性为“成绩”
转换为关系模型如下:
系(系编号,系名,学校名)
班级(班级号,班级名,系编号)
教研室(教研室号,教研室,系编号)
学生(学号,姓名,学历,班级号,导师职工号)
课程( 课程号,课程名)
教员(职工号,姓名,职称,教研室号)
选修(学号,课程号,成绩)

5.某工厂生产若干产品,每种产品由不同的零件组成,有的零件可用在不同的产品上。这些零件由不同的原材料制成,不同零件所用的材料可以相同。这些零件按所属的不同产品分别放在仓库中,原材料按照类别放在若干仓库中。请用 E 一 R 图画出此工厂产品、零件、材料、仓库的概念模型。
数据库期末复习知识点:(仅供参考)_第7张图片
各实体属性为:
产品:产品号,产品名
零件:零件号,零件名
原材料:原材料号,原材料名,类别
仓库:仓库号,仓库名
各联系的属性为:
产品组成:使用零件量
零件制造:使用原材料量
零件存储:存储量
材料存放: 存储量
转换为关系模型如下:
产品(产品号,产品名)
零件(零件号,零件名)
原材料(原材料号,原材料名,类别,仓库号,
数据库期末复习知识点:(仅供参考)_第8张图片

三、范式

范式

1、设有如下所示的关系R。
数据库期末复习知识点:(仅供参考)_第9张图片
(1)它为第几范式?为什么?
1、解:(1)它是2NF。
∵R的候选码为课程名,而“课程名→教师名”,“教师名→课程名”不成立,“教师名→教师地址”,∴,即存在非主属性教师地址对候选码课程名的传递函数依赖,因此R不是3NF。
又∵不存在非主属性对候选码的部分函数依赖,∴R是2NF。
(2)是否存在删除操作异常?若存在,则说明是在什么情况下发生?
存在。当删除某门课程时会删除不该删除的教师的有关信息。
(3)将它分解为高一级范式,分解后的关系如何解决分解前可能存在的删除操作的异常问题。
分解为高一级范式如下所示。
数据库期末复习知识点:(仅供参考)_第10张图片
分解后,若删除课程数据时,仅对关系R1操作,教师地址信息在关系R2中仍然保留,不会丢失教师方面的信息。
数据库期末复习知识点:(仅供参考)_第11张图片
数据库期末复习知识点:(仅供参考)_第12张图片

存储结构

数据库期末复习知识点:(仅供参考)_第13张图片

你可能感兴趣的:(sql)