数据库第三章习题
第3章SQL语言习题
一、单项选择题
语言是()的语言,易学习。
A.过程化 B.非过程化 C.格式化 D.导航式
语言是()语言。
A.层次数据库
B.网络数据库
C.关系数据库
D.非数据库
语言具有()的功能。
A.关系规范化、数据操纵、数据控制B数据定义、数据操纵、数据控制
C.数据定义、关系规范化、数据控制
D.数据定义、关系规范化、数据操
纵
4.关于SQL语言,下列说法正确的是()。
A 数据控制功能不是SQL语言的功能之一
B SQL采用的是面向记录的操作方式,以记录为单位进行操作
C SQL是非过程化的语言,用户无须指定存取路径
D SQL作为嵌入式语言语法与独立的语言有较大差别
5.对表中数据进行删除的操作是()。
语言的数据操纵语句包括SELECT,INSERT,UPDATE和DELETE等。其中最重要的,也是使用最频繁的语句是()。
语言具有两种使用方式,分别称为交互式SQL和()。
A.提示式SQL
B.用户式SQL
C.嵌入式SQL
D.解释式SQL
语言中,实现数据检索的语句是()。
9.下列SQL语句中,修改表结构的是()。
D .DELETE
10.在SQL中,用户可以直接操作的是()。
A 基本表
B 视图
C 存储文件
D 基本表和视图
11.在SQL的查询语句中,对应关系代数中“投影”运算的语句是()。
A WHERE
B FROM
C SELECT
D HAVING
12.在SELECT语句中,需对分组情况满足的条件进行判断时,应使用()。
A WHERE
B GROUP BY
C ORDER BY
D HAVING
13.SQL中,与“NOT IN”等价的操作符是()。
A =ANY
B <>ANY
C =ALL
D <>ALL
14.视图建立后,在数据字典中存放的是()。
A 查询语句
B 组成视图的表的内容
C 视图的定义
D 产生视图的表的定义
第15到第18题基于这样的三个表即学生表S、课程表C和学生选课表SC,它们的结构如下:
S(S#,SN,SEX,AGE,DEPT)
C(C#,CN)
SC(S#,C#,GRADE)
其中:S#为学号,SN为姓名,SEX性别,AGE为年龄,DETP为系别,C#为课程号,CN为课程名,GRADE为成绩。
15.检索所有比“王华”年龄大的学生姓名、年龄和性别。正确的SELECT 语句是()。
SN, AGE, SEX FROM S WHERE AGE>(SELECT AGE FROM S WHERE SN=’王华’)
SN, AGE, SEX FROM S WHERE SN=’王华’
SN,AGE,SEX FROM S WHERE AGE>(SELECT AGE WHERE SN=’王华’) SN, AGE, SEX FROM S WHERE AGE>王华.AGE
16.检索选修课程“C2”的学生中成绩最高的学生的学号。正确的SELECT 语句是()。
S# FROM SC WHEREC#=’C2’AND GRADE>= (SELECT GRADE FROM SC WHERE C#=’C2’)
S# FROM SC WHERE C#=’C2’ AND GRADE IN(SELECT GRADE FROM SC WHEREC#=’C2’)
S# FROM SC WHERE C#=’C2’ AND GRADE NOT IN(SELECT GRADE FROM SC WHERE C#=’C2’)
S# FROM SC WHERE C#=’C2’ AND GRADE>=ALL (SELECT GRADE FROM SC WHERE C#=’C2’)
17.检索学生姓名及其所选修课程的课程号和成绩。正确的SELECT语句是()。
,#, FROM S WHERE #=#
, #, FROM SC WHERE #= , # , FROM S, SC WHERE #=#
, #, FROM S, SC
18.检索选修四门以上课程的学生总成绩(不统计不及格的课程),并要求按总成绩的降序排列出来。正确的SELECT的语句是()。
S#, SUM (GRADE) FROM SC WHERE GRADE>=60 GROUP BY S# ORDER
BY 2 DESC HAVING COUNT (*)>=4
S#, SUM (GRADE) FROM SC WHERE GRADE>=60 GROUP BY S# HAVING COUNT (*)>=4 ORDER BY 2 DESC
C. SELECT S#, SUM (GRADE) FROM SC WHERE GRADE>=60 HAVING COUNT (*)>=4 GROUP BY S# ORDER BY 2 DESC
D. SELECT S#, SUM (GRADE) FROM SC WHERE GRADE>=60 ORDER BY 2 DESC GROUP BY S# HAVING COUNT (*)>=4
19.假定学生关系是S (S#,SNAME ,SEX ,AGE ),课程关系是C (C#,CNAME ,TEACHER ),学生选课关系是SC (S#,C#,GRADE )。要查找选修“COMPUTER”课程的:“女”学生姓名,将涉及到关系( )。
, C
, SC
D .S,C,SC
20.下面的数据库的表中,若职工表的主关键字是职工号,部门表的主关键字是部门号,SQL 操作( )不能执行。
部门表 A. 从职工表中删除行(‘025’,‘王芳’,‘03’,720)
B. 将行(‘005’,‘乔兴’,‘04’,750)插入到职工表中
C. 将职工号为‘001’的工资改为700
D. 将职工号为‘038’的部门号改为‘03’
21.若用如下的SQL 语句创建一个student 表:CREATE TABLE student(NO CHAR(4) NOT NULL, NAME CHAR(10) NOT NULL, SEX CHAR(2), AGE INT),可以插到student 表中的是( )。
A.(‘1031’,‘曾华’,男,23)
B.(‘1031’,‘曾华’,NULL ,NULL )
C.(NULL ,‘曾华’,‘男’,‘23’)
D.(‘1031’,NULL ,
‘男’,23)
22.数据库中建立索引的目的是为了( )。
A 加快建表速度
B 加快存取速度
C 提高安全性 D
节省存储空
间
23.视图是数据库系统三级模式中的( )。
A 外模式
B 模式
C 内模式
D 模式映
像
24.下列说法不正确的是()。
A 基本表和视图一样,都是关系
B 可以使用SQL对基本表和视图进行操作
C 可以从基本表或视图上定义视图
D 基本表和视图中都存储数据
二、综合题
1.已知关系R如图所示
图关系R
试用SQL语言实现下列操作:
(1)按属性A分组,求出每组中在属性C上的最大值和最小值,且将它们置于视图RVE中。
Create view RVE(A,CMAX,CMIN)
As
Select max(C),min(C)
From R
Group by A;
(2)在视图RVE中查询属性A=‘98’的记录。
Select *
From RVE
Where A=‘98’;
2.已知学生表S和学生选课表SC其关系模式如下:
S(SNO,SN,SD, PROV);SC(SNO,CN,GR),其中SNO为学号,SD为系名,PROV为省区,CN为课程名,GR为分数。试用SQL语言实现下列操作:
(1)查询“信息系”的学生来自哪些省区。
Select DISTINCT PROV
From S
Where SD=‘信息系’;
(2)按分数降序排序,输出“英语系”学生选修了“计算机”课程的学生的姓名和分数。
Select SN,GR
From S,SC
Where = AND SD=‘英语’ AND CN=‘计算机’
Group by GR DESC;
3.设有学生表S(SNO,SN)(SNO为学生号,SN为姓名)和学生选修课程表SC(SNO,CNO,CN,G)(CNO为课程号,CN为课程名,G为成绩),试用SQL 语言完成以下各操作:
(1)创建一个视图V-SSC(SNO,SN,CNO,CN,G)。
Create view V-SSC(SNO,SN,CNO,CN,G)
AS
Select , , , ,
From S, SC
Where =
(2)从视图V-SSC上查询平均成绩在90分以上的SNO和平均分。
Select SNO,AVG(G)
From V-SSC
Group by SNO
Having AVG(G)
4.设有关系模式:
S(SN,SNAME,CITY)其中,S代表供应商,SN,代表供应商号,SNAME为供应商名字,CITY为供应商所在城市,主关键字为SN;
P(PN,PNAME,COLOR,WEIGHT)其中P代表零件,PN代表零件号,PNAME 代表零件名,COLOR为零件颜色,WEGHT为零件重量,主关键字为PN;
J(JN,JNAME,CITY)其中J表示工程,JN为工程编号,JNAME为工程名,CITY为工程所在城市,主关键字为JN。
如下图所示表示供应商(S)-零件(P)-工程(J)数据库表,写出实现以下各题功能的SQL语句:
S
(1)取出工程的全部细节。
Select *
From J
(2)取出所在城市为上海的所有工程的全部细节。
Select *
From J
Where CITY=‘上海’;
(3)取出重量最轻的零件代号。
Select PN
From P
Where WEIGHT=
(Select MIN (WEIGHT)
From P );
(4)取出为工程J1提供零件的供应商代号。
Select SN
From SPJ
Where JN=’J1’;
(5)取出为工程J1提供零件P1
Select SN
From SPJ
Where JN=’J1’ AND PN=’P1’;
(6)取出由供应商S1提供零件的工程名称。
Select
From SPJ, J
Where = AND =‘S1’;
(7)取出供应商S1提供的零件的颜色。
Select Distinct
From SPJ, P
Where = AND =’S1’;
(8)取出为工程J1或J2提供零件的供应商代号。
Select Distinct SN
From SPJ
Where JN=’J1’ OR JN=’J2’;
(9)取出为工程J1提供红色零件的供应商代号。
Select Distinct
From SPJ, P
Where = AND =‘J1’ AND =‘红’;
(10)取出为所在城市为上海的工程提供零件的供应商代号。
Select DISTINCT
From J, SPJ
Where = AND =‘上海’;
(11)取出为所在城市为上海或北京的工程提供红色零件的供应商代号。
Select
From P, J, SPJ
Where = AND = AND =‘红’AND (=‘上海’OR =‘北京’);
(12)取出供应商与工程所在城市相同的供应商提供的零件代号。
Select DISTINCT
From S, J, SPJ
Where = AND = AND =
(13)取出上海的供应商提供给上海的任一工程的零件的代号。
Select
From S, J, SPJ
Where = AND = AND =‘上海’ AND =‘上海’;
(14)取出由供应商S1提供零件的工程的代号。
Select Distinct
From S,P,SPJ
Where = AND = AND =‘S1’;
(15)取出所有这样的一些
Select Distinct ,
From S, J, SPJ
Where = AND = ;
(16)把零件P2的重量增加5,颜色改为黄色。
UPDATE P
SET WEIGHT=WEIGHT+5, COLOR=‘黄’
Where PN=‘P2’;
(17)将没有供货的所有工程项目从J表中删除。
Delete
From J
Where JN not in
( Select *
From SPJ);
(18)查询提供全部零件的供应商名。
Select SNAME
From S
Where SNO IN (
SELECT SNO
FROM SPJ);
(19)查询这样的工程项目号:该工程项目使用P1零件的平均使用量大于工程项目J1使用的任何一种零件的最大数量。
SELECT JNO
FROM SPJ
WHERE =P1
GROUP BY JNO
HAVING AVG (QTY)>ALL
(SELECT QTY
FROM SPJ
WHERE =‘J1’);
(20)定义一个视图,它由所有这样的工程项目(工程项目号与所在城市名称)组成:它们由供应商S1供货且使用零件P1。
CREAT VIEW JN,JCITY
AS
Select ,
From J, SPJ
Where = AND =’S1’ AND =’P1’;
5.假设有如下4个样本表:
成绩表)
(1)列出至少有2
Select CLASS
From student
Where SEX=’男’
GROUP BY CLASS
HAVING COUNT(*)>2
(2)显示student表中不姓“王”的同学记录。
SELECT *
FROM STUDENT
WHERE NAME NOT LIKE‘王%’;
(3)显示student表中每个学生的姓名和年龄。
SELECT NAME, 2017-YEAR(birthday)
FROM STUDENT;
(4)显示student表中最大和最小的birthday日期值。
SELECT NAME,MAX(BIRTHDAY),MIN(BIRTHDAY)
FROM STUDENT;
(5)以班号和年龄从大到小的顺序显示student表中的全部记录。
SELECT *
FROM STUDENT
ORDER BY CLASS,2017-YEAR(BIRTHDAY)DESC
(6)显示“男”教师及其所上的课程。
SELECT ,
FROM TEACHER,COURSE
WHERE = AND =‘男’;
(7)列出最高分同学的no、cno和degree列。
SELECT NO,CNO,DEGREE
FROM SCORE
WHERE DEGREE=
(SELECT MAX(DEGREE)
FROM SCORE)
(8)列出和“李军”同性别的所有同学的name。
SELECT NAME
FROM STUDENT
WHERE SEX=
(SELECT SEX
FROM STUDENT
WHERE NAME=‘李军’);
(9)列出和“李军”同性别并同班的同学name。
SELECT NAME
FROM STUDENT
WHERE SEX =
(SELECET SEX
FROM STUDENT
WHRER NAME=‘李军’)
AND CLASS=
(SELECT CLASS
FROM STUDENT
WHERE NAME=‘李军’);
(10)列出所有选修“计算机导论”课程的“男”同学的成绩表。
SELECT ,,
FROM STUDENT,COURSE,SCORE
WHERE = AND =
AND =‘计算机导论’ AND =‘男’;
6、设职工---社团数据库有三个基本表:
职工(职工号,姓名,年龄,性别);
社会团体(编号,名称,负责人号,活动地点);
参加(职工号,编号,参加日期);
试用SQL语句完成下列操作:
1)建立下列两个视图。
社团负责人(编号,名称,负责人职工号,负责人姓名,负责人性别);
参加人情况(职工号,姓名,社团编号,社团名称,参加日期)CREATE VIEW 社团负责人(编号,名称,负责人职工号,负责人姓名,负责人性别)AS
SELECT 编号,名称,负责人, 姓名, 性别
FROM 社会团体,职工
WHERE 社会团体.负责任号=职工.职工号
CREATE VIEW参加人情况(职工号,姓名,社团编号,社团名称,参加日期)AS
SELECT 参加.职工号,职工.姓名,社会团体.编号,社会团体.名称,参加。参加日期
FROM 职工,社会团体,参加
WHERE 职工.职工号=参加.职工号 AND 参加.编号=社会团体.编号;
2)查找参加唱歌队或篮球队的职工号和姓名。
SELECT 职工号,姓名
FROM 职工,社会团体,参加
WHERE 职工.职工号=参加.职工号 AND 参加.编号=社会团体.编号
AND 社会团体.名称=‘唱歌队’OR社会团体.名称=‘篮球队’;
3)查找没有参加任何团体的职工情况。
SELECT *
FROM 职工
WHERE NOT EXISTS
(SELECT *
FROM 参加
WHERE 参加.职工号=职工.职工号);
4)查找参加了全部社会团体的职工情况。
SELECT *
FROM 职工
WHERE NOT EXISTS
(SELECT *
FROM 参加
WHERE NOT EXISTS
(SELECT*
FROM 社会团体
WHERE 参加.职工号=职工.职工号AND
参加.编号=社会团体.编号));
5)查找至少参加了职工号为“1001”的职工所参加的全部社会团体的职工号。
SELECT 职工号
FROM 职工
WHERE NOT EXISTS(
SELECT *
FROM 参加参加1
WHERE 参加1.职工号=‘1001’AND NOT EXISTS
(SELECT *
FROM 参加.参加2
WHERE 参加2.编号=参加1.编号
AND 参加2.职工号=职工.职工号))
6)求每个社会团体的参加人数。
SELECT COUNT(职工号)
FROM 参加
GROUP BY 编号
7)把对“社会团体”和“参加”
两个表的数据查看、插入和删除数据
的权力赋给用户李平,并允许他将此
权力授予其他用户。
GRANT SELECT,INSERT,DELECT
ON 社会团体,参加
TO 李平
W
ITH GRANT OPTION;