SQL复习题.docx
- 文档编号:15338641
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:16
- 大小:25.17KB
SQL复习题.docx
《SQL复习题.docx》由会员分享,可在线阅读,更多相关《SQL复习题.docx(16页珍藏版)》请在冰点文库上搜索。
SQL复习题
数据管理技术的发展过程:
人工管理阶段、文件系统阶段、数据库系统阶段
数据库系统的构成:
数据库、数据库管理系统、应用系统及其开发工具、
数据库管理员、用户
数据库系统的模式结构:
从DBMS角度看:
DBS通常采用三级模式\两级映像结构
数据库系统的体系结构:
从DB最终用户角度看:
DBS的结构分为单用户、主从式、分布式和客户/服务器等结构。
事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位
事务的特性:
原子性一致性隔离性持续性
并发引起的问题:
丢失更新读“脏”数据不可重复读
封锁就是事务T在对某个数据对象操作之前,先向系统发出请求,对其加锁
基本封锁类型:
排它锁又称为写锁共享锁又称为读锁
活锁的定义:
多个事务请求对同一数据封锁时,使某一用户总是处于等待的状况称为活锁。
如何避免活锁:
采用先来先服务的策略:
死锁的定义:
多事务交错等待的僵持局面
如何避免死锁:
预防死锁发生、允许发生死锁
预防死锁发生:
一次封锁法、顺序封锁法
允许发生死锁:
超时法、等待图法
故障的种类:
事务内部的故障、系统故障、介质故障、计算机病毒
1、现有如下关系:
(35分,每小题5分)
学生(学号,姓名,性别,专业,出生年月)
教师(教师编号,姓名,所在部门,职称)
授课(教师编号,学号,课程编号,课程名称,教材,学分,成绩)
1查找学习“数据库原理”课程且成绩不及格的学生学号和任课教师编号;
SELECT学号,教师编号
FROM授课
WHERE课程名称='数据库原理'
2查找学习“英语”课程的“计算机应用”专业学生的学号,姓名和成绩;
SELECT学生.学号,学生.姓名,成绩
FROM学生,授课
WHERE学生.学号=授课.学号and课程名称='英语'
3查找教师“李洪”所教过的学生成绩为90分以上(包括90)的学生学号,姓名和专业;
SELECT学号,姓名,专业
FROM学生
WHERE学号IN(SELECT学号
FROM授课
WHERE成绩>=90AND教师编号=(SELECT教师编号
FROM教师
WHERE姓名='李洪'))
4删除学生表中学号为“9903016”的记录;
DELETE
FROM学生
WHERE学号='9903016'
5将编号为“60016”的教师所在的部门改为“计算机”;
UPDATE教师
SET所在部门='计算机'
WHERE教师编号='60016'
6建立“计算机应用”专业成绩有过不及格的学生的视图;
CREATEVIEWW1
AS
SELECT*
FROM学生
WHERE专业='计算机'AND学号IN(SELECT学号
FROM授课
WHERE成绩<60)
7向学生表中增加一个“奖学金”列,其数据类型为数值型。
ALTERTABLE学生
ADD奖学金DECIMAL/NUMERIC
2、建立一个教职工关系表TEACHER,表中有6个字段:
教职工编号NO(字符型),姓名NAME(字符型),性别SEX(字符型),出生日期BIRTHDAY(日期型),职称PROF(字符型),所在系DEPART(字符型),其中NO是关系的码;用SQL语言完成下列功能:
建立教职工关系表TEACHER。
CREATETABLETEACHER(NOCHAR(5)PRIMARYKEY,NAMEVARCHAR(50),SEXCHAR(5),BIRTHDAYDATETIME,PROFCHAR(10),DEPARTCHAR(10))
查询计算机系所有教职工的姓名。
SELECTNAME
FROMTEACHER
WHEREDEPART='计算机'
添加一个教职工记录,编号为20020003,姓名为吴珊,性别为女,出生日期为1976年10月20号,职称为助教,所在系为计算机系。
INSERTINTOTEACHER
VALUES('20020003','吴珊','女',1996年10月20号,'助教','计算机')
删除王珊老师的记录。
DELETE
FROMTEACHER
WHERENAME='王珊'
9.对于第8题中的3个基本表,试用SQL进行下列查询。
(1)selecte#,enamefromemp
whereage>50
andsex='男'
(2)连接查询来实现:
selecta.e#,enamefromempa,worksb,compc
wherea.e#=b.e#
andb.c#=c.c#
andcname='联华公司'
嵌套查询来实现:
Selecte#,enamefromemp
Wheree#in(selecte#fromworks
Wherec#in(selectc#fromcomp
Wherecname='联华公司'))
(3)selecte#,count(c#)fromworks
groupbye#
havingcount(c#)>=2
(4)使用合并查询来实现(SQLSERVER不支持)
selecte#fromworks
wherec#=’c4’
intersect
selecte#fromworks
wherec#=’c8’
使用嵌套查询来实现:
selecte#fromworks
wherec#=’04’
ande#in(selecte#fromworks
wherec#=’08’)
(5)使用连接查询来实现:
selecte#,ename,ecity
fromemp,comp
wheree#=mgr-e#
使用不相关嵌套查询来实现:
selecte#,ename,ecity
fromemp
wheree#in(selectmgr-e#fromcomp)
使用相关的嵌套查询来实现:
selecte#,ename,ecity
fromemp
whereexists(select*fromcomp
whereemp.e#=comp.mgr-e#)
(6)selecte#,enamefromemp,comp
whereemp.e#=comp.mgr-e#
andecity=city
(7)selecte#,enamefromempa,works,comp,empb
wherea.e#=works.e#
andworks.c#=comp.c#
andcomp.mgr-e#=b.e#
anda.ecity=b.ecity
(8)selecte#,enamefromemp
wheree#notin(selecte#fromworks,comp
whereworks.c#=comp.c#
andcname=’联华’)
10.对于第8题中的3个基本表,试用SQL进行下列查询。
(1)selecte#,count(c#)NUM,sum(salary)SUM_SALRY
Fromworks
Groupbye#
(2)selecte#,ename
fromemp,works,comp,(selectc#,avg(salary)avgfromworks)a
Whereemp.e#=works.e#
Andworks.c#=comp.c#
Andcname=’联华’
Anda.c#=works.c#
Andsalary (3)selecte#,ename fromemp,works,(selectc#,avg(salary)avgfromworks)a Whereemp.e#=works.e# Anda.c#=works.c# Andsalary>avg (4)selectc#,cnamefromcomp Wherec#=(selectc# from(selectc#,count(e#)numfromworks)a) Wherenum=(selectmax(num) from(selectc#,count(e#)numfromworks)a))) (5)selectc#,cname from(selectc#,sum(salary)sum_salaryfromworks)a,comp wherea.sum_salary=(selectmin(sum_salary) from(selectc#,sum(salary)sum_salaryfromworks)a) anda.c#=comp.c# (6)selectc#,avg(salary) Fromworks Groupbyc# Havingavg(salary)>(selectavg(salary) Fromworks,comp Whereworks.c#=comp.c# Andame=’联华’) 1、假设每个职工可以在多个公司工作,检索每个职工的兼职公司数目和工资总数,显示E#,MUM,SUM_SALARY分别表示工号、公司数目和工资总数。 分析: 涉及到表为works表;按照职工来统计公司的数目和工资总额 selectE#,count(c#)NUM,sum(salary)SUM_SALARY fromworks groupbyE# 2、检索”联华公司”中低于本公司平均公司的职工工号和姓名.(10题2小题) (1)查找联华公司职工的平均工资。 方法一: 连接查询实现 selectavg(salary)fromworks,comp whereworks.c#=comp.c# andcname='联华公司' 方法二: 嵌套查询实现 Selectavg(salary)fromworks Wherec#=(selectc#fromcomp Wherecname='联华公司') ------------------------------------5799.5 (2)查找联华公司工资低于 (1)的职工工号和姓名。 方法一: 连接查询实现外层查询 selectemp.e#,ename fromemp,works,comp whereemp.e#=works.e# andworks.c#=comp.c# andcname='联华公司' andsalary<(Selectavg(salary)fromworks Wherec#=(selectc#fromcomp Wherecname='联华公司')) 3、检索工资高于其所在公司职工平均工资的所有职工的工号和姓名。 (1)先查找各公司的平均工资 selectc#,avg(salary)avg_sal fromworks groupbyc# (2)检索所有职工的工号、姓名、公司,工资 selectemp.e#,ename,works.c#,salary, fromemp,works whereemp.e#=works.e# (3)检索所有职工的工号、姓名、公司,工资,所在公司和平均工资 selectemp.e#,ename,works.c#,salary,a.c#,a.avg_sal fromemp,works,(selectc#,avg(salary)avg_sal fromworksgroupbyc#)a whereemp.e#=works.e# andworks.c#=a.c# andsalary>avg_sal 4、检索职工人数最多的公司的编号和名称(10题的4小题). (1)按照公司来统计公司的人数(涉及到works) selectc#,count(e#)fromworks groupbyc# (2)从 (1)的结果中查找人数最多的公司的人数 selectmax(cont)from(selectc#,count(e#)cont fromworks groupbyc#)a (3)根据 (2)查询的结果,从 (1)的结果中查找人数最多的公司的编号. selectc#from(selectc#,count(e#)contfromworksgroupbyc#)a wherecont=(selectmax(cont)from(selectc#,count(e#)cont fromworks groupbyc#)a) (4)已知公司编号,在COMP表中查找公司编号和名称 selectc#,cnamefromcomp wherec#in(selectc#from(selectc#,count(e#)contfromworksgroupbyc#)a wherecont=(selectmax(cont)from(selectc#,count(e#)cont fromworks groupbyc#)a)) 5、检索工资总额最小的公司的编号和名称。 (1)按公司来统计其公司的工资总额 selectc#,sum(salary)sum fromworks groupbyc# (2)在 (1)的结果集合中查找最小的工资总额 (3)在 (1)的结果集合中查找最小的工资总额对应的公司编号 selectc#from(selectc#,sum(salary)sum fromworksgroupbyc#)a wheresum=(selectmin(sum)from(selectc#,sum(salary)sum fromworksgroupbyc#)a) (4)在(3)基础上进一步查找公司的编号和名称 selectc#,cnamefromcomp wherec#in( selectc#from(selectc#,sum(salary)sum fromworksgroupbyc#)a wheresum=(selectmin(sum)from(selectc#,sum(salary)sum fromworksgroupbyc#)a)) 6.检索平均工资高于联华公司平均工资的公司编号和名称.(10题的6小题) (1)查找联华公司职工的平均工资.(涉及到works,comp) selectavg(salary)fromworks,comp whereworks.c#=comp.c# andcname='联华公司' (2)统计各公司的平均工资. selectc#,avg(salary)avg_salary fromworks groupbyc#(运行出来的结果是个记录集,可以作为一个表来使用) (3)在 (2)的结果集中查找满足条件 (1)的公司编号. selectc#from(selectc#,avg(salary)avg_salary fromworks groupbyc#)a whereavg_salary>(selectavg(salary)fromworks,comp whereworks.c#=comp.c# andcname='联华公司') (4)已知工资编号在COMP中查找公司编号和名称. selectc#,cnamefromcomp wherec#in(selectc#from(selectc#,avg(salary)avg_salary fromworks groupbyc#)a whereavg_salary>(selectavg(salary)fromworks,comp whereworks.c#=comp.c# andcname='联华公司')) 一、选择题(每题2分,共20分) 1.数据库(DB).数据库系统(DBS)和数据库管理系统(DBMS)三者之间的关系是___A_____。 A.DBS包括DB和DBMSB.DBMS包括DB和DBSC.DB包括DBS和DBMSD.DBS就是DB,也就是DBMS 2.在数据库设计中用关系模型来表示实体和实体之间的联系。 关系模型的结构是___B_。 A.层次结构B.二维表结构C.网状结构D.封装结构 3.在数据库的三级模式结构中,描述数据库中全体数据的全局逻辑结构和特征的是____B____。 A.外模式B.模式C.内模式D.存储模式 4.关系中的“主关键字”不允许取空值是指__A__约束规则。 A.实体完整性B.引用完整性C.用户定义的完整性D.数据完整性 5.数据库系统达到了数据独立性是因为采用了__D__。 A.层次模型B.网状模型C.关系模型D.三级模式结构 6.自然连接是构成新关系的有效方法。 一般情况下,当对关系R和S使用自然连接时,要求R和S含有一个或多个共有的__D__。 A.元组B.行C.记录D.属性 7.设有关系R,按条件f对关系R进行选择,正确的是_C___。 A.RRB.R fRC.σf(R)D.Πf(R) 8.在SQL语言的SELECT语句中,能实现投影操作的是_____C___。 A.SELECTB.FROMC.WHERED.GROUPBY 9.在下列实体类型的联系中,多对多联系的是__D__。 A.学校与系部的从属联系B.父亲与孩子的父子联系C.省与省会的联系D.顾客与商品的购买联系 10.现有如下关系: 患者(患者编号,患者姓名,性别,出生日期,所在单位) 医疗(患者编号,医生编号,医生姓名,诊断日期,诊断结果) 其中,医疗关系中的外码是(A) A.患者编号B.患者姓名C.患者编号和患者姓名D.医生编号和患者编号 二、设计操作题(共80分) 1.为图书馆设计一个数据库,要求包括图书和借书人的信息。 图书的信息包括书号、书名、作者、定价、位置;借书人的信息包括姓名、借书证号、单位;借书需要记录借书日期。 要求: (1)将数据库用ER图来描述;(5分) (2)转换成关系模式并注明关系模式的主码、外码。 (5分) 2.用SQL语言定义(每小题5分,共25分)注意: 说明主键码和外键码(如果有的话)。 (1)图书关系Book,包括图书编号BookID、图书名称Title、图书作者Author、出版社Publisher。 CreatetableBook (BookIDchar(10)primarykey,Titlechar(5),Authorvarchar(50),Publisherchar(10)) (2)学生关系Student,包括学生编号ID、学生姓名Name、系Dept。 CreatetableStudent (IDchar(5)primarykey,Namevarchar(50),Deptchar(10)) (3)学生借书关系Lend,包括学生编号ID、图书编号BookID、借阅时间LDate。 CreatetableLend (IDchar(5)foreignkeyreferencesStudent(ID),BookIDchar(10)foreignkeyreferencesBook(BookID), Ldatedatetime) (4)增加学生王小美,编号是100200036,计算机系。 Insert IntoStudent(ID,Name,Dept) Values('100200036','王小美',‘计算机系’) (5)从学生借书关系Lend中,删除“李小萍”所借的所有书。 DeleteBookID FromLend Where‘李小萍’=(selectName FromStudent WhereStudent.ID=Lend.ID) 3.学生管理数据库中有三个表即学生表S、课程表C和学生选课表SC,它们的结构如下: S(S#,SN,SEX,AGE,DEPT)C(C#,CN)SC(S#,C#,GRADE) 其中: S#为学号,SN为姓名,SEX为性别,AGE为年龄,DEPT为系别,C#为课程号,CN为课程名,GRADE为成绩。 请用SELECT命令完成以下检索。 (共45分) (1)检索“王华”的姓名、年龄和性别。 (5分) SelectSN,SEX,AGE FromS WhereSN='王华' (2)检索选修了“数据结构”课程的学生的学号。 (5分) SelectS# FromC,SC WhereCN=‘数据结构’andC.C#=SC.C# (3)检索学生姓名及其所选修课程的课程名和成绩。 (5分) SelectSN,CN,GRADE FromS,C,SC WhereS.S#=SC.S#andC.C#=SC.C# (4)检索选修四门以上课程的学生的学号。 (10分) SelectS#,count(C#)a FromSC GroupbyS#havinga>=4 (5)检索和“王华”在同一个系的学生的学号和姓名。 (10分) SelectS#,SN FromS WhereDEPT=(selectDEPT FromS WhereSN=''王华) (6)检索同时选修了“数据结构”和“C语言”的学生的学号和姓名。 (10分) SelectS#,SN FromS WhereC#=(SelectC# FromC WhereCN='C语言') AndS#in(SelectS# FromSC WhereC#=(selectC# FromC WhereCN=‘数据结构’))
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 复习题