关系数据库语言SQL习题与答案.docx
- 文档编号:4861157
- 上传时间:2022-12-10
- 格式:DOCX
- 页数:9
- 大小:17.60KB
关系数据库语言SQL习题与答案.docx
《关系数据库语言SQL习题与答案.docx》由会员分享,可在线阅读,更多相关《关系数据库语言SQL习题与答案.docx(9页珍藏版)》请在冰豆网上搜索。
关系数据库语言SQL习题与答案
关系数据库语言SQL习题与答案
一,选择题
1,下面关于SQL语言的叙述中,哪一条是错误的().
A.SQL既可作为联机交互环境中的查询语言又可嵌入到主语言中
B.SQL没有数据控制功能
C.使用SQL用户只能定义索引而不能引用索引
D.使用SQL用户可以定义和检索视图
2,SQL语言是()
A.高级语言B.编程语言
C.结构化查询语言D.宿主语言
3,在学生数据库中,用SQL语句列出的所有女生的姓名,应该对学生关系进行()操作.
A.选择B.连接C.投影D.选择和投影
4,NULL是指()
A.0B.空格C.无任何值D.空字符串
5,下列哪条语句不属于SQL数据操纵功能范围()
A.SELECTB.CREATTABLEC.DELETED.INSERT
6,用()命令可建立唯一索引
A.CREATETABLEB.CREATECLUSTER
C.CREATEINDEXD.CREATEUNIQUEINDEX
二,填空题
1,SQL语言的使用方式有两种,一种是,另一种是
2,在SQL查询中,WHERE子句的功能是.
3,视图是一个虚表,它是从的表.
4,SQL语言的数据操纵功能包括,,,和,
5,在SQL支持的关系数据库三级模式结构中,外模式对应于,模式对应于,内模式对应于.
6,在SELECT语句中,HAVING子句必须跟在子句后面.
三,问题及操作题
1,名词解释
SQL模式SQL数据库基本表视图相关子查询联接查询
嵌入式SQL游标
2,对于教学数据库的三个基本表
学生S(S#,SNAME,AGE,SEX)
学习SC(S#,C#,GRADE)
课程C(C#,CNAME,TEACHER)
试用SQL的查询语句表达下列查询:
(1)检索LIU老师所授课程的课程号和课程名.
(2)检索年龄大于23岁的男学生的学号和姓名.
(3)检索至少选修LIU老师所授课程中一门课程的女学生姓名.
(4)检索WANG同学不学的课程的课程号.
(5)检索至少选修两门课程的学生学号.
(6)检索全部学生都选修的课程的课程号与课程名.
(7)检索选修课程包含LIU老师所授课的学生学号.
3,设有两个基本表R(A,B,C)和S(A,B,C)试用SQL查询语句表达下列关系代数表达式:
(1)R∪S
(2)R∩S(3)R-S(4)πA,B(R)πB,C(S)
4,试用SQL查询语句表达下列对教学数据库中三个基本表S,SC,C的查询:
(1)统计有学生选修的课程门数.
(2)求选修C4课程的学生的平均年龄.
(3)求LIU老师所授课程的每门课程的学生平均成绩.
(4)统计每门课程的学生选修人数(超过10人的课程才统计).要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列.
(5)检索学号比WANG同学大,而年龄比他小的学生姓名.
(6)检索姓名以WANG打头的所有学生的姓名和年龄.
(7)在SC中检索成绩为空值的学生学号和课程号.
(8)求年龄大于女同学平均年龄的男学生姓名和年龄.
5,试用SQL更新语句表达对教学数据库中三个基本表S,SC,C的各个更新操作:
(1)往基本表S中插入一个学生元组('S9','WU',18).
(2)在基本表S中检索每一门课程成绩都大于等于80分的学生学号,姓名和性别,并把检索到的值送往另一个已存在的基本表STUDENT(S#,SANME,SEX).
(3)在基本表SC中删除尚无成绩的选课元组.
(4)把WANG同学的学习选课和成绩全部删去
(5)把选修MATHS课不及格的成绩全改为空值.
(6)把低于总平均成绩的女同学成绩提高5%.
(7)在基本表SC中修改C4课程的成绩,若成绩小于等于75分时提高5%,若成绩大于75分时提高4%(用两个UPDATE语句实现).
6,在宿主语言的程序中使用SQL语句有哪些规定
7,嵌入式SQL语句何时不必涉及到游标何时必须涉及到游标
答案:
一,1,B2,C3,D4,C5,B6,D
二,1,嵌入式交互式2,选择
3,基本表导出的表4,数据查询数据更新数据插入数据删除
5,视图或部分基本表基本表存储文件
6,GROUPBY
三,
1,名词解释
SQL模式:
SQL模式是表和授权的静态定义.一个SQL模式定义为基本表的集合.一个由模式名和模式拥有者的用户名或账号来确定,并包含模式中每一个元素(基本表,视图,索引等)的定义.
SQL数据库:
SQL(StructuredQueryLanguage),即'结构式查询语言',采用英语单词表示和结构式的语法规则.一个SQL数据库是表的汇集,它用一个或多个SQL模式定义.
基本表:
在SQL中,把传统的关系模型中的关系模式称为基本表(BaseTable).基本表是实际存储在数据库中的表,对应一个关系.
视图:
在SQL中,把传统的关系模型中的子模式称为视图(View),视图是从若干基本表和(或)其他视图构造出来的表.
相关子查询:
在嵌套查询中出现的符合以下特征的子查询:
子查询中查询条件依赖于外层查询中的某个值,所以子查询的处理不只一次,要反复求值,以供外层查询使用.
联接查询:
查询时先对表进行笛卡尔积操作,然后再做等值联接,选择,投影等操作.联接查询的效率比嵌套查询低.
嵌入式SQL:
嵌入在高级语言的程序中使用的SQL语言称为嵌入式SQL.
游标:
游标是与某一查询结果相联系的符号名,用于把集合操作转换成单记录处理方式.
2,
(1)检索LIU老师所授课程的课程号和课程名.
SELECTC#,CNAME
FROMC
WHERETEACHER='LIU'
(2)检索年龄大于23岁的男学生的学号和姓名.
SELECTS#,SNAME
FROMS
WHERE(AGE>23)AND(SEX='M')
(3)检索至少选修LIU老师所授课程中一门课程的女学生姓名.
SELECTSNAME
FROMS
WHERESEX='F'ANDS#IN
(SELECTS#
FROMSC
WHEREC#IN
(SELECTC#
FROMC
WHERETEACHER='LIU')
NOTICE:
有多种写法,比如联接查询写法:
SELECTSNAME
FROMS,SC,C
WHERESEX='F'ANDSC.S#=S.S#
ANDSC.C#=C.C#
ANDTEACHER='LIU'
但上一种写法更好一些.
(4)检索WANG同学不学的课程的课程号.
SELECTC#
FROMC
WHEREC#NOTIN
(SELECTC#
FROMSC
WHERES#IN
(SELECTS#
FROMS
WHERESNAME='WANG'))
(5)检索至少选修两门课程的学生学号.
SELECTDISTINCTX.SNO
FROMSCX,SCY
WHEREX.SNO=Y.SNOANDX.CNOY.CNO
Notice:
对表SC进行自连接,X,Y是SC的两个别名.
(6)检索全部学生都选修的课程的课程号与课程名.
SELECTC#,CNAME
FROMC
WHERENOTEXISTS
(SELECT*
FROMS
WHERES#NOTIN
(SELECT*
FROMSC
WHERESC.C#=C.C#))
要从语义上分解:
(1)选择课程的课程号与课程名,不存在不选这门课的同学.
其中,"不选这门课的同学"可以表示为:
SELECT*
FROMS
WHERES#NOTIN
(SELECT*
FROMSC
WHERESC.C#=C.C#)
或者
SELECT*
FROMS
WHERENOTEXISTS
(SELECT*
FROMSC
WHERES.S#=C.S#AND
SC.C#=C.C#)
(7)检索选修课程包含LIU老师所授课的学生学号.
SELECTDISTINCTS#
FROMSC
WHEREC#IN
(SELECTC#
FROMC
WHERETEACHER='LIU'))
3,
(1)SELECTA,B,C
FROMR
UNION
SELECTA,B,C
FROMS
(2)SELECTA,B,C
FROMR
INTERSECT
SELECTA,B,C
FROMS
(3)SELECTA,B,C
FROMR
WHERENOTEXISTS
(SELECTA,B,C
FROMS
WHERER.A=S.AANDR.B=S.BANDR.C=S.C)
(4)SELECTR.A,R.B,S.C
FROMR,S
WHERER.B=S.B
4,
(1)统计有学生选修的课程门数.
SELECTCOUNT(DISTINCTC#)FROMSC
(2)求选修C4课程的学生的平均年龄.
SELECTAVG(AGE)
FROMS
WHERES#IN
(SELECTS#
FROMSC
WHEREC#='C4')
或者,
SELECTAVG(AGE)
FROMS,SC
WHERES.S#=SC.S#ANDC#='004'
(3)求LIU老师所授课程的每门课程的学生平均成绩.
SELECTCNAME,AVG(GRADE)
FROMSC,C
WHERESC.C#=C.C#ANDTEACHER='LIU'
GROUPBYC#
(4)统计每门课程的学生选修人数(超过10人的课程才统计).要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列.
SELECTDISTINCTC#,COUNT(S#)
FROMSC
GROUPBYC#
HAVINGCOUNT(S#)>10
ORDERBY2DESC,C#ASC
(5)检索学号比WANG同学大,而年龄比他小的学生姓名.
SELECTX.SNAME
FROMSASX,SASY
WHEREY.SNAME='WANG'ANDX.S#>Y.S#ANDX.AGE(SELECTAVG(AGE)FROMSASYWHEREY.SEX='女')
5,
(1)往基本表S中插入一个学生元组('S9','WU',18).
INSERTINTOS(S#,SNAME,AGE)VALUES('59','WU',18)
(2)在基本表S中检索每一门课程成绩都大于等于80分的学生学号,姓名和性别,并把检索到的值送往另一个已存在的基本表STUDENT(S#,SANME,SEX).
INSERTINTOSTUDENT(S#,SNAME,SEX)
SELECTS#,SNAME,SEX
FROMSWHERENOTEXISTS
(SELECT*FROMSCWHERE
GRADE<80ANDS.S#=SC.S#)
(3)在基本表SC中删除尚无成绩的选课元组.
DELETEFROMSC
WHEREGRADEISNULL
(4)把WANG同学的学习选课和成绩全部删去.
DELETEFROMSC
WHERES#IN
(SELECTS#
FROMS
WHERESNAME='WANG')
(5)把选修MATHS课不及格的成绩全改为空值.
UPDATESC
SETGRADE=NULL
WHEREGRADE<60ANDC#IN
(SELECTC#
FROMC
WHERECNAME='MATHS')
6)把低于总平均成绩的女同学成绩提高5%.
UPDATESC
SETGRADE=GRADE*1.05
WHEREGRADE<(SELECTAVG(GRADE)FROMSC)ANDS#IN(SELECTS#FROMSWHERESEX='F')
(7)在基本表SC中修改C4课程的成绩,若成绩小于等于75分时提高5%,若成绩大于75分时提高4%(用两个UPDATE语句实现).
UPDATESC
SETGRADE=GRADE*1.05
WHEREC#='C4'ANDGRADE75
6,在宿主语言的程序中使用SLQ语句有以下规定:
(1)在程序中要区分SQL语句与宿主语言语句
(2)允许嵌入的SQL语句引用宿主语言的程序变量(称为共享变量),但有两条规定:
1)引用时,这些变量前必须加":
"作为前缀标识,以示与数据库中变量有区别.
2)这些变量由宿主语言的程序定义,并用SQL的DECLARE语句说明.
(3)SQL的集合处理方式与宿主语言单记录处理方式之间要协调.需要采用游标机制,把集合操作转换成单记录处理方式.
7,
(1)INSERT,DELETE,UPDATE语句,查询结果肯定是单元组时的SELECT语句,都可直接嵌入在主程序中使用,不必涉及到游标.
(2)当SELECT语句查询结果是多个元组时,此时宿主语言程序无法使用,一定要用游标机制把多个元组一次一个地传送给宿主语言处理.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关系 数据库 语言 SQL 习题 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)