SQL综合练习(填空操作)_第5章sql综合练习
SQL综合练习(填空操作)由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“第5章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.0 B.空格 C.无任何值 D.空字符串
5,下列哪条语句不属于SQL数据操纵功能范围()
A.SELECT B.CREAT TABLE C.DELETE D.INSERT
6,用()命令可建立唯一索引
A.CREATE TABLE B.CREATE CLUSTER
C.CREATE INDEX D.CREATE UNIQUE INDEX
二,填空题
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,B 2,C 3,D 4,C 5,B 6,D
二,1,嵌入式 交互式 2,选择
3,基本表导出的表 4,数据查询 数据更新 数据插入 数据删除
5,视图或部分基本表 基本表 存储文件
6,GROUP BY
三,1,名词解释
SQL模式:SQL模式是表和授权的静态定义.一个SQL模式定义为基本表的集合.一个由模式名和模式拥有者的用户名或账号来确定,并包含模式中每一个元素(基本表,视图,索引等)的定义.SQL数据库:SQL(Structured Query Language),即'结构式查询语言',采用英语单词表示和结构式的语法规则.一个SQL数据库是表的汇集,它用一个或多个SQL模式定义.基本表:在SQL中,把传统的关系模型中的关系模式称为基本表(Base Table).基本表是实际存储在数据库中的表,对应一个关系.视图:在SQL中,把传统的关系模型中的子模式称为视图(View),视图是从若干基本表和(或)其他视图构造出来的表.相关子查询:在嵌套查询中出现的符合以下特征的子查询:子查询中查询条件依赖于外层查询中的某个值, 所以子查询的处理不只一次,要反复求值,以供外层查询使用.联接查询:查询时先对表进行笛卡尔积操作,然后再做等值联接,选择,投影等操作.联接查询的效率比嵌套查询低.嵌入式SQL:嵌入在高级语言的程序中使用的SQL语言称为嵌入式SQL.游标:游标是与某一查询结果相联系的符号名,用于把集合操作转换成单记录处理方式.2,(1)检索LIU老师所授课程的课程号和课程名.SELECT C#,CNAME
FROM C
WHERE TEACHER='LIU'
(2)检索年龄大于23岁的男学生的学号和姓名.SELECT S#,SNAME
FROM S
WHERE(AGE>23)AND(SEX='M')
(3)检索至少选修LIU老师所授课程中一门课程的女学生姓名.SELECT SNAME
FROM S
WHERE SEX='F' AND S# IN
(SELECT S#
FROM SC
WHERE C# IN
(SELECT C#
FROM C
WHERE TEACHER='LIU')
NOTICE:有多种写法,比如联接查询写法:
SELECT SNAME
FROM S,SC,C
WHERE SEX='F' AND SC.S#=S.S#
AND SC.C#=C.C#
AND TEACHER='LIU'
但上一种写法更好一些.(4)检索WANG同学不学的课程的课程号.SELECT C#
FROM C
WHERE C# NOT IN
(SELECT C#
FROM SC
WHERE S# IN
(SELECT S#
FROM S
WHERE SNAME='WANG'))
(5)检索至少选修两门课程的学生学号.SELECT DISTINCT X.SNO
FROM SC X,SC Y
WHERE X.SNO=Y.SNO AND X.CNOY.CNO
Notice:对表SC进行自连接,X,Y是SC的两个别名.(6)检索全部学生都选修的课程的课程号与课程名.SELECT C#,CNAME
FROM C
WHERE NOT EXISTS
(SELECT *
FROM S
WHERE S# NOT IN
(SELECT *
FROM SC
WHERE SC.C#=C.C#))
要从语义上分解:(1)选择课程的课程号与课程名,不存在不选这门课的同学.其中,“不选这门课的同学”可以表示为:
SELECT *
FROM S
WHERE S# NOT IN
(SELECT *
FROM SC
WHERE SC.C#=C.C#)
或者
SELECT *
FROM S
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE S.S#=C.S# AND
SC.C#=C.C#)
(7)检索选修课程包含LIU老师所授课的学生学号.SELECT DISTINCT S#
FROM SC
WHERE C# IN
(SELECT C#
FROM C
WHERE TEACHER='LIU'))
3,(1)SELECT A,B,C
FROM R
UNION
SELECT A,B,C
FROM S
(2)SELECT A,B,C
FROM R
INTERSECT
SELECT A,B,C
FROM S
(3)SELECT A,B,C
FROM R
WHERE NOT EXISTS
(SELECT A,B,C
FROM S
WHERE R.A=S.A AND R.B=S.B AND R.C=S.C)
(4)SELECT R.A,R.B,S.C
FROM R,S
WHERE R.B=S.B
4,(1)统计有学生选修的课程门数.SELECT COUNT(DISTINCT C#)FROM SC
(2)求选修C4课程的学生的平均年龄.SELECT AVG(AGE)
FROM S
WHERE S# IN
(SELECT S#
FROM SC
WHERE C#='C4')
或者,SELECT AVG(AGE)
FROM S,SC
WHERE S.S#=SC.S# AND C#='004'
(3)求LIU老师所授课程的每门课程的学生平均成绩.SELECT CNAME,AVG(GRADE)
FROM SC ,C
WHERE SC.C#=C.C# AND TEACHER='LIU'
GROUP BY C#
(4)统计每门课程的学生选修人数(超过10人的课程才统计).要求输出课程号和选修人数, 查询结果按人数降序排列,若人数相同,按课程号升序排列.SELECT DISTINCT C#,COUNT(S#)
FROM SC
GROUP BY C#
HAVING COUNT(S#)>10
ORDER BY 2 DESC, C# ASC
(5)检索学号比WANG同学大,而年龄比他小的学生姓名.SELECT X.SNAME
FROM S AS X, S AS Y
WHERE Y.SNAME='WANG' AND X.S#>Y.S# AND X.AGE(SELECT AVG(AGE)FROM S AS Y WHERE Y.SEX='女')
5,(1)往基本表S中插入一个学生元组('S9','WU',18).INSERT INTO S(S#,SNAME,AGE)VALUES('59','WU',18)
(2)在基本表S中检索每一门课程成绩都大于等于80分的学生学号,姓名和性别, 并把检索到的值送往另一个已存在的基本表STUDENT(S#,SANME,SEX).INSERT INTO STUDENT(S#,SNAME,SEX)
SELECT S#,SNAME,SEX
FROM S WHERE NOT EXISTS
(SELECT * FROM SC WHERE
GRADE
(3)在基本表SC中删除尚无成绩的选课元组.DELETE FROM SC
WHERE GRADE IS NULL
(4)把WANG同学的学习选课和成绩全部删去.DELETE FROM SC
WHERE S# IN
(SELECT S#
FROM S
WHERE SNAME='WANG')
(5)把选修MATHS课不及格的成绩全改为空值.UPDATE SC
SET GRADE=NULL
WHERE GRADE
(SELECT C#
FROM C
WHERE CNAME='MATHS')
6)把低于总平均成绩的女同学成绩提高5%.UPDATE SC
SET GRADE=GRADE*1.05
WHERE GRADE
(7)在基本表SC中修改C4课程的成绩,若成绩小于等于75分时提高5%, 若成绩大于75分时提高4%(用两个UPDATE语句实现).UPDATE SC
SET GRADE=GRADE*1.05
WHERE C#='C4' AND GRADE75
6, 在宿主语言的程序中使用SLQ语句有以下规定:
(1)在程序中要区分SQL语句与宿主语言语句
(2)允许嵌入的SQL语句引用宿主语言的程序变量(称为共享变量),但有两条规定:
1)引用时,这些变量前必须加“:”作为前缀标识,以示与数据库中变量有区别.2)这些变量由宿主语言的程序定义,并用SQL的DECLARE语句说明.(3)SQL的集合处理方式与宿主语言单记录处理方式之间要协调.需要采用游标机制,把集合操作转换成单记录处理方式.7,(1)INSERT,DELETE,UPDATE语句,查询结果肯定是单元组时的SELECT语句, 都可直接嵌入在主程序中使用,不必涉及到游标.(2)当SELECT语句查询结果是多个元组时,此时宿主语言程序无法使用, 一定要用游标机制把多个元组一次一个地传送给宿主语言处理.