P.S:按书本习题题号写标题
适用于XBL老师班级的考点范围
目录上标注(选择题和简答题)、例题是样卷上截下来的
答:
(1)数据:描述事物的符号记录称为数据。数据与其语义是不可分的。
(2)数据库(DB):数据库是长期储存在计算机内的、有组织的、可共享的数据集合。
(3)数据库系统(DBS):由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员构成的系统。
(4)数据库管理系统(DBMS):数据库管理系统是位于用户与操作系统之间的一层数据管理软件。
DDL是数据定义语言
DCL是数据控制语言
答:
答:数据库系统的特点:
答:
答:概念模型是现实世界到机器世界的一个中间层次。是按用户的观点来对数据和信息建模,主要用于数据库设计。
概念模型的一种表示方式:E-R模型
答:
答:数据库系统的三级模式结构是指数据库系统是由外模式、模式和内模式三级构成。
(1)模式
模式也称为逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
(2)外模式
外模式也称为子模式或用户模式,能够看见和使用局部数据的逻辑结构和特征描述,是数据库用户的数据及视图,是与某一应用右端的数据的逻辑表示。
(3)内模式
内模式也称为存储模式,一个数据库只有一个内模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。
优点:把数据的具体组织留给数据库管理系统,使用户能逻辑地、抽象地处理数据,而不必关心数据在计算机中的具体表现方法与存储方式。
样卷答案:
答:数据库系统一般由数据库、数据库管理系统、应用程序和数据库管理员构成。具体是指:
答:
答:
ps:交、连接、除都可以用上面五种方法表示。
SQL语句
注意:
(3)(5)的外层的查询都不是在SC表格里面查找的,而是Student和Course表,因为要找到符合条件的全部的学生名字和课程名。
(6)(8)记得加上distinct。
(7)有三层select,注意每一层是在哪个表查询。
(10)有升降排序。
(12)字符匹配用 LIKE,NOT LIKE
(13)空值 IS NULL,IS NOT NULL
select SC.Sno,student.Sname,Course.Cname,SC.Grade
From Student,Course,SC
where Student.Sno=SC.Sno AND SC.Cno=Course.Cno AND Student.Sdept='IS'
select SC.Sno,student.Sname,Student.Sdept,SC.Grade
From Student,Course,SC
where Student.Sno=SC.Sno AND SC.Cno=Course.Cno AND Course.Cname='数据库' AND SC.Grade>90
select Student.Sno,Student.Sname,Student.Sdept
from Student
where sno in(
select distinct sno
from sc
where Sno not in(
select Sno
from sc
where grade<60
)
)
select Sno,Sname
from Student
where Sage > 23 and Ssex='男'
select cno
from Course
where cno not in(
select Course.cno
from SC
inner join Student on SC.Sno =Student.Sno
where Student.Sname='王敏'
)
select Cno
from course
where cno not in(
select cno
from Student,sc
where Student.Sno=SC.cno and Student.sname='王敏'
)
select distinct SC.sno
from SC
group by sno
having count(SC.cno)>=2
select Course.Cno,Course.Cname
from Course
where Course.Cno in(
select SC.cno
from SC
group by SC.cno
having count(SC.sno)= (select count(sno)
from Student)
)
select count(distinct SC.cno)
from SC
select AVG(Student.Sage)
from Student,SC
where Student.sno=SC.sno AND SC.cno='4'
要求输出课程号和选修人数,查询结果按人数降序排列,
若人数相同,按课程号升序排列。
select Cno as '课程号',COUNT(Sno) as '选课人数'
from SC
group by Cno
Having COUNT(Sno)>10
order by count(Sno) desc, Cno
select sname
from student
where sno >(
select sno
from student
where sname='王敏'
)
and sage <(
select sage
from student
where sname='王敏'
)
方法二:这里的first和second都是student表,看成两个表格去对比
select first.sname
from student first, student second
where first.sno>second.sno and first.sage> second.sage and second.Sname='王敏'
select Sname,Sage
from Student
where Sname like '王%'
select Sno, Cno
from SC
where grade is null
select sname,sage
from student
where sage >(
select AVG(sage)
from student
where Ssex='女'
)
and Ssex='男'
select sname,sage
from student
where Ssex='男' and sage> all(
select sage
from student
where Ssex='女'
)
这里也可以把all改成max
注意:
这里的2.和实验一的(8)是查询不同的东西
7.要student表进行左连接,才能保证所有学生名单都会出现
select count(distinct sno)
from sc
select sno,sname
from student
where sno in(
select sno
from sc
group by sno
having count(sc.cno)>=2)
–老师给的答案:
select student.sno,student.sname
from student,sc
where Student.sno = SC.Sno
group by student.sno,student.sname
having count(sc.cno)>=2
–老师给的答案:
update sc
set grade = (
select avg(grade)
from sc
where cno = '3'
)where sno = '95001' and cno = '3'
select Student.Sno, Sname,Ssex,Sage,Sdept,Cno,Grade
from Student inner join SC
on Student.sno=SC.Sno
写法2:
select Student.Sno, Sname,Ssex,Sage,Sdept,Cno,Grade
from Student, SC
where Student.Sno=SC.sno
–注意这里不能写成select *,因为会出现重复的sno列
select first.Cpno, second.Cpno
from Course first, Course second
where first.Cpno=second.Cno
–变式:查询课程之先修课的先修课的课程名
select x.cname, z.cname
from course x, course y, course z
where x.cpno = y.cno and y.cpno = z.cno
select Student.Sno, Sname,Ssex,Sage,Sdept,Cno,Grade
from student left outer join SC
on Student.Sno=SC.Sno
select Student.*,Cno,Grade
from Student,sc
where Student.Sno=SC.Sno and SC.Grade>=60 and Student.Ssex='男'
写法二:
select Student.*,Cno,Grade
from Student inner join SC
on Student.Sno=Sc.sno
where SC.Grade>=60 and Student.Ssex='男'
–变式:再加一个“没有挂科记录”的条件
select Student.*,Cno,Grade
from Student,sc
where Student.Sno=SC.Sno and SC.Grade>=60 and Student.Ssex='男' and Student.Sno not in
(
select sno
from sc
where Grade<60
)
select *
from Student
where Sdept in(
select Sdept
from Student
where Sname='张立'
)and sname !='张立'
–这里的Sdept in()也可以写成Sdeot =(),因为子查询只返回一个值。
–最后别忘了把张立剔除
select Student.Sno,Sname,Sdept
from Student,SC,Course
where Student.Sno=SC.Sno and SC.cno=Course.Cno and Course.Cname='数据库'
–错误写法:(忽略了“只有”的条件,这样找出来的可能含男生女生都修了的课程)
select distinct Course.Cname
from Course,SC,Student
where Student.Sno=SC.Sno and SC.cno=Course.Cno and Student.Ssex='女'
–不要忘记加上distinct
–要在SC表格里面找,不要在Course表里面找。不然会出现男生女生都没修的课程。
–老师给的答案:
select distinct cno
from sc
where cno not in(
select distinct cno
from student,sc
where student.sno = sc.sno and ssex = '男'
)
select Student.sname
from Student
where not exists(
select sno
from sc
where student.sno=sc.sno and cno='1'
)
–老师给的答案:
select Student.sname
from Student
where sno not in(
select sno
from sc
where cno='1'
)
–not exists也可以写成 not in
–但是这里不要写成where cno<>‘1’,不然会有既选修了1号课程又修了其他课程的学生名字出现
select Student.Sno,Sname, AVG(SC.Grade) as avg_grad
from Student inner join SC on Student.sno=sc.sno
group by Student.Sno,Sname
having AVG(SC.Grade)>85
–查询sno和sname,group by中要把这两个都写进去(刚好sno和sname是一一对应的),不然会报错
不要忘记把inner join那一行写上
insert
into Student(Sno,Sname,Sage)
values('95999','张三',18)
select * from Student
create table S(
Sno char(5) primary key,
Sname char(20),
Sex char(2)
);
insert
into S(Sno,Sname,Sex)
select distinct Student.Sno,Sname,Ssex
from Student
where Sno in(
--写法一:
select Sno
from SC
where Sno not in(
select Sno
from SC
where grade<80
)
)
select * from S
–写法二:这种最外层不需要distinct
select sno
from sc
group by sno
having min(grade)>=80
delete
from sc
where Grade is null
select * from sc
delete
from sc
where sno in(
select sno
from Student
where sname like '王%')
–插入了测试数据:
insert
into sc(sno,cno,grade)
values(‘95004’,‘2’,55)
–更新表格
update sc
set grade = null
where Grade<60 and cno = (
select cno
from course
where cname='数学'
)
select * from sc
–删除测试数据:
delete
from sc
where grade is null
update sc
set grade=grade*1.05
where grade in(
select distinct grade
from Student,sc
where student.sno=sc.sno and student.Ssex='女' and sc.grade < (
select avg(Grade) --前面的题目加了null值,记得删除掉再算平均比较好
from sc
)
)
–写法2:
update sc
set grade=grade*1.05
where grade<(
select AVG(Grade)
from sc inner join Student on student.sno = sc.sno
where Ssex='女'
)
–老师给的答案:
update sc
set grade=grade*1.05
where grade<(
select avg(grade)
from sc
)and sno in(
select sno
from student
where ssex = '女'
)
update sc
set grade = grade*1.04
where grade>75 and cno='4'
update sc
set grade = grade*1.05
where grade<=75 and cno='4'
–这道题居然有顺序?!
–如果先修改了小于75分的,可能分数上升到75分,再对大于75分的处理,就变成了两次修改成绩,这就出错了!
go
create view IS_Student
as
select sno,sname,sage
from Student
where Sdept='IS'
with check option
go
select * from IS_Student
go
create view IS_S1(Sno,Sname,Grade)
as
select Student.sno,sname,grade
from Student,SC
where Sdept='IS' and Student.Sno=SC.Sno and SC.Cno='1';
go
select * from IS_S1
go
create view IS_S2
as
select sno,sname,grade
from IS_S1
where grade>=90;
go
select * from IS_S2
go
create view BT_S(sno,sname,sbirth)
as
select sno,sname,2014-sage
from student
go
select * from BT_S
go
create view S_G(Sno,Gavg)
as
select sno,AVG(Grade)
from sc
group by Sno
go
select * from S_G
go
create view F_Student(F_sno,name,sex,age,dept)
as
select *
from student
where Ssex='女';
go
select * from F_Student
drop view BT_S
select sno,sage
from IS_Student
where sage<20
select IS_Student.Sno,Sname
from IS_Student,SC
where IS_Student.Sno = SC.Sno and SC.Cno = '1';
select *
from S_G
where Gavg>=90;
–写法2:子查询生产一个派生表S_G
select *
from (select sno,AVG(grade)
from sc
group by sno
) as S_G(sno,Gavg)
where Gavg>=90;
–将信息系学生视图IS_Student中学号为“95002”的学生姓名改为“刘辰”
update IS_Student
set Sname='刘辰'
where sno='95002'
insert
into IS_Student
values('95009','赵新','20')
select * from Student
–注意上面这种写法IS_Student不会显示,因为专业sdept被默认为是null了
delete
from IS_Student
where Sno='95009'
表格:S供应商 P零件 J工程项目 SPJ供应情况表
题目:
注意:
(3)(7)有DIST
(8)-(11)是更新、删除、插入操作语句
答:
答:
答:基本表的行列子集视图一般是可更新的。
若视图的属性来自集合函数、表达式,则该视图肯定是不可以更新的。
所有的视图是否都可以更新?为什么?
答:不是。视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更新。因为有些视图的更新不能惟一有意义地转换成对相应基本表的更新,所以,并不是所有的视图都是可更新的。
答:
答:
答:
答:数据库的完整性指数据的正确性和相容性。
答:
答:完整性约束条件是指数据库中的数据应该满足的语义约束条件。
一般可以分为六类:静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束。
答:DBMS 的完整性控制机制应具有三个方面的功能:
下方第1、2题超长答案预警!
我自己都看困了😴
看 视频的P2 速成吧
答:
补充:关于最小函数依赖的知识点
答:
(1)BC也是R的候选码
(2)BCE、ACE、CDE
(3)R的候选码BCE、ACE、CDE,没有非主属性对码部分依赖或传递依赖,所以R属于3NF。而三个函数依赖中,决定因素都不包含码,所以R不属于BCNF。
这题答案来自这篇文章
答:
(1)任何一个二目关系是属于3NF的。
正确。只有两个属性不存在传递函数依赖。
(2)任何一个二目关系是属于BCNF的。
正确。只有两个属性,决定因素必含有码。
(3)任何一个二目关系是属于4NF的。
正确。只有两个属性不存在非平凡的多值依赖。
(4)当且仅当函数依赖A→B在R上成立,关系R(A,B,C)等于其投影R1(A,B)和R2(A,C)的连接。
错误。当函数依赖B→A在R上成立时,关系R(A,B,C)也等于其投影R1(A,B)和R2(A,C)的连接。
(5)若R.A→R.B,R.B→R.C则R.A→R.C。
正确。
(6)若R.A→R.B,R.A→R.C,则RA→R.(B,C)。
正确。
(7) 若R.B→R.A,R.C→R.A,则R.(B,C)→R.A。
正确。
(8)若R.(B,C)→R.A,则R.B→R.A,R.C→R.A。
错误。根据B、C两个属性才能确定A。例如知道学号和课程才能确定成绩,只知道学号或是只知道课程都不能确定成绩。
以下是必看例题!!!
例题
答:
详细版:
题目:
可以看这个视频理解过程:
答案看这篇博客
事务时用户定义的一个数据库操作序列,是不可分割的工作单位。是数据恢复和并发控制的基本单位。
Atomicity 原子性
Consistency 一致性
Isolation 隔离性
Durability 持续性
这就是全部范围了。
考了多对多关系的ER图、写关系模型,找出模型中的外码
还考察了逻辑蕴含,还要证明是否是3NF
还有封锁粒度
考了数据、数据库等那4各概念的简答
END