2023年6月21日发(作者:)

数据库系统概论 SQL语言习题

SQL语言 习题

一、单项选择题

1.SQL语言是 的语言,易学习。

A.过程化 B.非过程化

C.格式化 D.导航式

答案:B

2.SQL语言是 语言。

A.层次数据库 B.网络数据库

C.关系数据库 D.非数据库

答案:C

3.SQL语言具有 的功能。

A.关系规范化、数据操纵、数据控制

B.数据定义、数据操纵、数据控制

C.数据定义、关系规范化、数据控制

D.数据定义、关系规范化、数据操纵

答案:B

4.SQL语言的数据操纵语句包括SELECT,INSERT,UPDATE和DELETE等。其中最重要的,也是使用最频繁的语句是 。

A.SELECT B.INSERT C.UPDATE D.DELETE

答案:A

5.SQL语言具有两种使用方式,分别称为交互式SQL和 。

A.提示式SQL B.多用户SQL C.嵌入式SQL D.解释式SQL

答案:C

6.SQL语言中,实现数据检索的语句是 。

A.SELECT B.INSERT

C.UPDATE D.DELETE

答案:A

7.下列SQL语句中,修改表结构的是 。

A.ALTER B.CREATE

C.UPDATE D.INSERT

答案:A

第8到第11题基于这样的三个表即学生表S、课程表C和学生选课表SC,它们的结构如下:

S(S#,SN,SEX,AGE,DEPT)

C(C#,CN)

SC(S#,C#,GRADE)

其中:S#为学号,SN为姓名,SEX为性别,AGE为年龄,DEPT为系别,C#为课程号,CN为课程名,GRADE为成绩。

8.检索所有比“王华”年龄大的学生姓名、年龄和性别。正确的SELECT语句是 。

A.SELECT SN,AGE,SEX FROM S

WHERE AGE>(SELECT AGE FROM S

WHERE SN=’王华’)

B.SELECT SN,AGE,SEX FROM S

WHERE SN=’王华’

C.SELECT SN,AGE,SEX FROM S

WHERE AGE>(SELECT AGE

WHERE SN=’王华’)

D.SELECT SN,AGE,SEX FROM S 数据库系统概论 SQL语言习题

WHERE AGE>王华.AGE

答案:A

9.检索选修课程“C2”的学生中成绩最高的学生的学号。正确的SELECT语句是 。

A.SELECT S# FORM SC WHERE C#=’C2’ AND GRAD>=

(SELECT GRADE FORM SC

WHERE C#=’C2’)

B.SELECT S# FORM SC

WHERE C#=’C2’ AND GRADE IN

(SELECT GRADE FORM SC

WHERE C#=’C2’)

C.SELECT S# FORM SC

WHERE C#=’C2’ AND GRADE NOT IN

(SELECT GRADE FORM SC

WHERE C#=’C2’)

D.SELECT S# FORM SC

WHERE C#=’C2’ AND GRADE>=ALL

(SELECT GRADE FORM SC

WHERE C#=’C2’)

答案:D

10.检索学生姓名及其所选修课程的课程号和成绩。正确的SELECT语句是 。

A.SELECT S.SN,SC.C#,SC.GRADE

FROM S

WHERE S.S#=SC.S#

B.SELECT S.SN,SC.C#,SC.GRADE

FROM SC

WHERE S.S#=SC.GRADE

C.SELECT S.SN,SC.C#,SC.GRADE

FROM S JION SC ON S#=SC.S#

D.SELECT S.SN,SC.C#,SC.GRADE

FROM S JOIN SC

答案:C

11. 检索选修4门以上课程的学生总成绩(不统计不及格的课程),并要求按总成绩的降序排列出来。正确的SELECT语句是( )。

A. SELECT S#,SUM(GRADE) FROM SC

WHERE GRADE>=60

GROUP BY S#

ORDER BY 2 DESC

HAVING COUNT(*)>=4

B. SELECT 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 数据库系统概论 SQL语言习题

GROUP BY S#

HAVING COUNT(*)>=4

答案:B

12.假定学生关系是S(S#,SNAME,SEX,AGE),课程关系是C(C#,CNAME,TEACHER),学生选课关系是SC(S#,C#,GRADE)。

要查找选修“COMPUTER”课程的“女”学生姓名,将涉及到关系 。

A.S B.SC,C C.S,SC D.S,C,SC

答案:D

13.在数据库的如下两个表中,若雇员信息表的主关键字是雇员号,部门信息表中的主关键字是部门号。在下列所给的操作中,哪个不能执行______。

部门信息表 雇员信息表

雇员号 雇员名 部门号 工资

部门号 部门名 负责人

001 张山 02 2000

010 王宏 01 1200

056 马林 02 1000

101 赵明 04 1500

A.从雇员信息表中删除行(’010’,’王宏’,’01’,1200)

B.将行(’102’, ’赵明’, ’01’,1500)插入雇员信息表中

C.将雇员信息表中,雇员=’010’的工资改为1600元

D.将雇员信息表中,雇员=’101’的部门号改为’05’

14.数据库的两个表同上,若雇员信息表的主关键字是雇员号,部门信息表的主关键字是部门号。在部门信息表中,哪一行可以被删除_________。

A.部门号=’01’的行 B.部门号=’02’的行

C.部门号=’03’的行 D.部门号=’04’的行

15.若用如下的SQL语句创建一个student表:

CREATE TABLE student(NO C(4) NOT NULL,

NAME C(8) NOT NULL,

SEX C(2),

AGE N(2))

可以插入到student表中的是 。

A.(’1031’, ’曾华’,男,23) B.(’1031’, ’曾华’,NULL,NULL)

C.(NULL,’曾华’, ’男’, ’23’) D.(’1031’,NULL,’男’,23)

答案:B

16. 与HAVING子句一起使用的子句是( )。

A.GROUP BY B.ORDER BY C.WHERE D.JOIN

答案:A

17. FOREIGN KEY约束是( )约束。

A.实体完整性 B.参照完整性 C.用户自定义完整性 D.域完整性

答案:B

18. 视图创建完成后,数据字典中存放的是( )。

A. 查询语句 B.查询结果 C.视图的定义 D.所引用的基本表的定义

答案:C

19. 查询中需要统计元组的个数时,应使用( )函数。

A.SUM(列名) B.COUNT(列名) C.COUNT(*) D.AVG(列名)

答案:C

20. 查询中需要统计某列中值的个数应使用( )函数。

A.SUM(列名) B.COUNT(列名) C.COUNT(*) D.AVG(列名)

答案:B

01

02

03

04

业务部

销售部

服务部

财务部

王军

李建

刘伟

陈威

二、多项选择题 数据库系统概论 SQL语言习题

第1题到第4题基于这样的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成绩

1.查询所有比“王华”年龄大的学生姓名、年龄和性别。正确的SELECT语句是( AC )。

A.SELECT SN, AGE, SEX FROM S

WHERE AGE>(SELECT AGE FROM S WHERE SN='王华')

B.SELECT SN, AGE, SEX FROM S

WHERE AGE>ANY

( SELECT AGE FROM S WHERE SN='王华')

C.SELECT SN, AGE, SEX FROM S

WHERE AGE>ALL

( SELECT AGE FROM S WHERE SN='王华')

D.SELECT SN, AGE, SEX FROM S

WHERE AGE>SOME

( SELECT AGE FROM S WHERE SN='王华')

2.查询选修了课程号为“C2”的学生中成绩最高的学生的学号,正确的SELECT语句是( ABC )。

A.SELECT S# FROM SC WHERE C#='C2' AND GRADE>=ALL

( SELECT GRADE FROM SC WHERE C#='C2')

B.SELECT S# FROM SC WHERE C#='C2' AND GRADE IN

( SELECT MAX(GRADE) FROM SC WHERE C#='C2')

C.SELECT S# FROM SC WHERE C#='C2' AND GRADE=

( SELECT MAX(GRADE) FROM SC WHERE C#='C2')

D.SELECT S# FROM SC WHERE C#='C2' AND GRADE>=ANY

( SELECT GRADE FROM SC WHERE C#='C2')

3.查询至少选修了两门课程的学生的姓名,正确的SELECT语句是( ACD )。

A.SELECT FROM S JOIN SC ON S.S#=SC.S#

GROUP BY S.S# HAVING COUNT(*)>=2

B.SELECT FROM S

WHERE EXISTS

( SELECT S# FROM SC

GROUP BY S#

HAVING COUNT(*)>2 )

C.SELECT FROM S

JOIN SC S1 ON S.S#=SC.S#

JOIN SC S2 ON S1.S#=S2.S#

WHERE S1.C#!=S2.C#

D.SELECT FROM S WHERE S# IN

( SELECT S# FROM SC

GROUP BY S#

HAVING COUNT(*)>2 ) 数据库系统概论 SQL语言习题

4.查询所有没有被学生选过的课程的名称,正确的SELECT语句是( BD )。

A. SELECT FROM C JOIN SC ON SC.C#=C.C# WHERE C.C# IS NULL

B. SELECT FROM C LEFT JOIN SC ON SC.C#=C.C# WHERE SC.C# IS NULL

C. SELECT FROM SC LEFT JOIN C ON SC.C#=C.C# WHERE SC.C# IS NULL

D. SELECT FROM SC RIGHT JOIN C ON SC.C#=C.C# WHERE SC.C# IS

NULL

三、填空题

1.SQL是 。

答案:结构化查询语言

2.SQL语言的数据定义功能包括 ① 、 ② 、 ③

和 ④ 。

答案:①定义数据库 ②定义基本表 ③定义视图 ④定义索引

3.视图是一个虚表,它是从 ① 中导出的表。在数据库中,只存放视图的 ② ,不存放视图的 ③ 。

答案:①一个或几个基本表 ②定义 ③视图对应的数据

4.设有如下关系表R、S和T:

以R(BH,XM,XB,DWH)

S(DWH,DWM)

T(BH,XM,XB,DWH)

①实现R∪T的SQL语句是 。

②实现DWH=‘100’(R)的SQL语句是 。

③实现∏XM,XB(R)的SQL语句是 。

④实现∏XM,DWH(XB=‘女’(R))的SQL语句是 。

⑤实现R❖ S的SQL语句是 。

⑥实现∏XM,XB,DWM(XB=‘男’(R❖ S))的SQL语句是 。

答案:①SELECT * FROM R UNION SELECT * FROM T

②SELECT * FROM R WHERE DWH=’100’

③SELECT XM,XB FROM R

④SELECT XM,DWH FROM R WHERE XB=’女’

⑤SELECT ,,,, FROM R

JION S ON =

⑥SELECT ,, FROM R

JOIN S ON =

WHERE =’男’

5.设有如下关系表R:

R(No,NAME,SEX,AGE,CLASS)

主关键字是NO

其中NO为学号,NAME为姓名,SEX为性别,AGE为年龄,CLASS为班号。

写出实现下列功能的SQL语句。

①插入一个记录(25,’李明’,’男’,21,’95031’); 。

②插入’95031’班学号为30、姓名为’郑和’的学生记录; 。

③将学号为10的学生姓名改为’王华’; 。

④将所有“95101”班号改为’95091’; 。

⑤删除学号为20的学生记录; 。

⑥删除姓’王’的学生记录; 。

答案:

①INSERT INTO R VALUES(25,’李明’,’男’,21,’95031’) 数据库系统概论 SQL语言习题

②INSERT INTO R(NO,NAME,CLASS) VALUES(30,’郑和’,’95031’)

③UPDATE R SET NAME=’王华’ WHERE NO=10

④UPDATE R SET CLASS=’95091’WHERE CLASS=’95101’

⑤DELETE FROM R WHERE NO=20

⑥DELETE FROMR WHERE NAME LIKE ’王%’

四、简述与应用题

1.试述 SQL 语言的特点。

答:

(l)一体化。 SQL 语言集数据定义语言 DDL 、数据操纵语言 DML 、数据控制语言 DCL

的功能于一体。

(2)高度非过程化。用SQL 语言进行数据操作,只要提出“做什么”,而无需指明“怎么做”,因此无需了解存取路径,存取路径的选择以及 sQL 语句的操作过程由系统自动完成。

(3)面向集合的操作方式。 SQL 语言采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。

(4)以同一种语法结构提供两种使用方式。 SQL 语言既是自含式语言,又是嵌入式语言。作为自含式语言,它能够独立地用于联机交互的使用方式;作为嵌入式语言,它能够嵌入到高级语言程序中,供程序员设计程序时使用。

(5)语言简捷,易学易用。

2 .试述 sQL 的定义功能。

答:

SQL 的数据定义功能包括定义表、定义视图和定义索引。 SQL 语言使用 CREATE TABLE

语句建立基本表, ALTER TABLE 语句修改基本表定义, DROP TABLE 语句删除基本表;使用 CREATE INDEX 语句建立索引, DROP INDEX 语句删除索引;使用 CREATE VIEW

语句建立视图, DROP VIEW 语句删除视图。

3.叙述使用SQL语言实现各种关系运算的方法。

答: SQL语言没有提供关系的笛卡尔积、交和差运算。其他关系运算对应的SQL语句格式是:

R∪S SELECT * FROM R

UNION

SELECT* FROM S

选择 SELECT *

FROM <表>

WHERE <指定选择的条件>

投影 SELECT <投影字段列表>

FROM <表>

连接 SELECT <连接的字段列表>

FROM <表名1>

JION <表名2> ON <连接条件>

3.设有如下所示的三个关系,并假定这三个关系框架组成的数据模型就是用户子模式。

其中各个属性的含义如下:A#(商店代号)、ANAME(商店名)、WQTY(店员人数)、CITY(所在城市)、B#(商品号)、BNAME(商品名称)、PRICE(价格)、QTY(商品数量)。

试用SQL语言写出下列查询,并给出执行结果:

(1) 找出店员人数不超过100人或者在长沙市的所有商店的代号和商店名。

SELECT A#,ANAME

FROM A

WHERE WQTY<=100 OR CITY=‘长沙’ 数据库系统概论 SQL语言习题

(2) 找出供应书包的商店名。

SELECT FROM A

JOIN AB ON A.A#=AB.A#

JION B ON AB.B#=B.B#

WHERE =‘书包’

(3) 找出至少供应代号为256的商店所供应的全部商品的商店名和所在城市。

SELECT , FROM A,

JOIN AB ON A.A#=AB.A#

WHERE AB.B# IN

(SELECT AB.B#;

FROM AB

WHERE A#=“256”)

A

A# ANAME WQTY CITY

101

204

256

345

620

百货商店

长安商场

西单商场

铁道商店

太平洋百货

B#

1

2

3

4

A#

101

101

101

101

204

256

256

345

345

345

620

AB

B# QTY

1

2

3

4

3

1

2

1

2

4

4

105

42

25

104

61

241

91

141

18

74

125

15

89

500

76

长沙

北京

北京

长沙

412 上海

B

BNAME PRICE

钢笔

羽毛球

复读机

书包

21

5

300

76

4.设有图书登记表TS,具有属性:BNO(图书编号),BC(图书类别),BNA(书名),AU(著者),PUB(出版社)。按下列要求用SQL语言进行设计:

(1) 按图书馆编号BNO建立TS表的索引ITS。

(2) 查询,按出版社统计其出版图书总数。

(3) 删除索引ITS。 数据库系统概论 SQL语言习题

解:

(1) CREATE INDEX ITS ON TS(BNO)

(2) SELECT PUB,COUNT(BNO)

FROM TS

GROUP BY PUB

(3) DROP INDEX ITS

5.己知三个关系R(A,B,C)、S(A,D,E)和T(D,F),其中,名称相同的属性为关联属性,C、E为数值型属性。

试用SQL语句实现如下操作:

(1) 将R、S和T三个关系按关联属性建立一个视图R-S-T;

(2) 对视图R-S-T按属性A分组后,求属性C和E的平均值。

解:

(1) CREATE VIEW R_S_T

AS

SELECT R.A,B,C,S.D,E,F

FROM R

JOIN S ON R.A=S.A

JOIN T S.D=T.D

(2) SELECT AVG(C),AVG(E)

FROM R_S_T

GROUP BY A

6.设有关系R(A,B)和S(A,C),A为相同属性。

试用SQL语句实现:

(1) 查询属性C>50时,R中相关联的属性B之值。

(2) 当属性C=40时,将R中与之相关连的属性B值修改为b4。

解:

(1) SELECT B

FROM R JOIN S ON R.A=S.A

WHERE C>50

(2) UPDATE R

SET B=‘b4’

WHERE A IN

(SELECT A

FROM S

WHERE C=40)

7.已知R(A,B,C)和S(C,D,E)两个关系,如下图所示。

执行如下SQL语句:

(1) CREATE VIEW H(A,BC,C,D,E)

AS

SELECT A,B,R.C,D,E

FROM R JOIN S ON R.C=S.C;

(2) SELECT B,D,E

FROM H

WHERE C=‘C2’

试给出:

(1) 视图H;

(2) 对视图H的查询结果。

S

R

A B C C D E

a1 b1 c1 c1 d1 e1

a2 b2 c2 c2 d2 e2

a3 b3 c3 c3 d3 e3 数据库系统概论 SQL语言习题

解:

本题的结果如图所示。

对H的查询结果

视图H

A B C D E B D E

a1 b1 c1 d1 e1 b2 d2 e2

a2 b2 c2 d2 e2

a3 b3 c3 d3 e3

8.已知关系R如图所示。

A B C

97 b1 84

97 b2 92

97 b3 98

98 b1 72

98 b2 84

98 b3 95

99 b1 88

99 b2 94

试用SQL语句实现下列操作:

(1) 按属性A分组,求出每组中在属性C上的最大值和最小值,且将它们置于视图RVE中。

(2) 在视图RVE中查询属性A=‘98’的记录。

解:

(1) CREATE VIEW RVE(A,CMAX,CMIN)

AS SELECT A,MAX(C),MIN(C)

FROMR

GROUP BY A;

(2) SELECT *

FROM RVE

WHERE A=‘98’

9.已知学生表S和学生选课表SC。其关系模式如下:

S(SNo,SN,SD,PROV)

SC(SNO,CN,GR)

其中,SNO为学号,SN为姓名,SD为系名,PROV为省区,CN为课程名,GR为分数。

试用SQL语言实现下列操作:

(1) 查询“信息系”的学生来自哪些省区。

(2) 按分数降序排序,输出“英语系”学生选修了“计算机”课程的学生的姓名和分数。

解:

(1) SELECT DISTINCT PROV

FROM S

WHERE SD=’信息系’

(2) SELECT SN,GR

FROM S JOIN SC ON =

WHERE SD=’英语系’AND CN=’计算机’

ORDER BY GR DESC 数据库系统概论 SQL语言习题

10.设有学生表S(SNO,SN)(SNO为学号,SN为姓名)和学生选课表SC(SNO,CNO,CN,G)

(CNO为课程号,CN为课程名,G为成绩),试用SQL语言完成以下各题:

(1) 建立一个视图V_SSC(SN,SN,CN,CN,G),并按CNO升序排序;

(2) 从视图V-SSC上查询平均成绩在90分以上的SN、CN和G。

解:

(1) CREATE VIEW V_SSC(SNO,SN,CNO,CN,G)

AS SELECT ,,CNO,,SC.G

FROM S JOIN SC ON S.SNO=SC.SNO

ORDER BY CNO

(2) SELECT SN,CN,G

FROM V_SSC

GROUP BY SNO

HAVING AVG(G)>90

11.设有关系模式:

SB(SN,SNAME,CITY)

其中,S表示供应商,SN为供应商代号,SNAME为供应商名字,CITY为供应商所在城市,主关键字为SN。

PB(PN,PNAME,COLOR,WEIGHT)

其中P表示零件,PN为零件代号,PNAME为零件名字,COLOR为零件颜色,WEIGHT为零件重量,主关键字为PN。

JB(JN,JNAME, CITY)

其中,J表示工程,JN为工程编号,JNAME为工程名字,CITY为工程所在城市,主关键字为JN。

SPJB(SN,PN,JN,QTY)

其中,SPJ表示供应关系,SN是为指定工程提供零件的供应商代号,PN为所提供的零件代号,JN为工程编号,QTY表示提供的零件数量,主关键字为(SN,PN,JN),外部关键字为SN,PN,JN。

写出实现以下各题功能的SQL语句:

(1) 取出所有工程的全部细节;

SELECT * FROM JB

(2) 取出所在城市为上海的所有工程的全部细节;

SELECT * FROM JB WHERE CITY=’上海’

(3) 取出重量最轻的零件代号;

SELECT PN FROM PB

WHERE WEIGHT=

(SELECT MIN(WEIGHT) FROM PB)

(4) 取出为工程J1提供零件的供应商代号;

SELECT SN FROM SPJB WHERE JN=’J1’

(5) 取出为工程J1提供零件P1的供应商代号;

SELECT SN FROM SPJB WHERE JN=’Jl’ AND PN=’Pl’

(6) 取出由供应商S1提供零件的工程名称;

SELECT

FROM JB JOIN SPJB ON =

WHERE =’S1’

(7) 取出供应商S1提供的零件的颜色;

SELECT DISTINCT

FROM PB JOIN SPJB ON =

WHERE SPJB.SN=’S1’ 数据库系统概论 SQL语言习题

(8) 取出为工程J1或J2提供零件的供应商代号;

SELECT DISTINCT SN

FROM SPJB

WHERE JN=’J1’ OR JN=’J2’

(9) 取出为工程J1提供红色零件的供应商代号;

SELECT DISTINCT

FROM SPJB JOIN PB ON =

WHERE =’J1’AND =’红’

(10) 取出为所在城市为上海的工程提供零件的供应商代号;

SELECT DISTINCT SN

FROM SPJB JOIN JB ON =

WHERE CITY=’上海’

(11) 取出为所在城市为上海或北京的工程提供红色零件的供应商代号;

SELECT SN

FROM SPJB JOIN PB ON = JOIN JB ON =

WHERE COLOR=’红’

AND CITY IN (’上海’,’北京’)

或:

SELECT DISTINCT SN From SPJ

WHERE JN IN (SELECT JN FROM JB

WHERE CITY IN('上海','北京'))

AND PN IN (SELECT PN FROM PB

WHERE COLOR= '红')

(12) 取出供应商与工程所在城市相同的供应商提供的零件代号;

SELECT DISTINCT

FROM SPJB

JOIN SB ON =

JOIN JB ON =

WHERE =

(13) 取出上海的供应商提供给上海的任一工程的零件的代号;

SELECT DISTINCT PN

FROM SPJB

JOIN SB ON =

JOIN JB ON =

WHERE =’上海’

AND =’上海’

(14) 取出至少由一个和工程不在同一城市的供应商提供零件的工程代号;

SELECT DISTINCT JN FROM SPJ

WHERE EXISTS (SELECT * FROM SB

WHERE EXISTS(SELECT * FROM JB

WHERE = AND = AND <>))

(15) 取出上海供应商不提供任何零件的工程的代号;

SELECT DISTINCT JN FROM SPJB

WHERE JN NOT IN

(SELECT DISTINCT FROM SB JOIN SPJB ON =

WHERE =’上海’)

(16) 取出这样一些供应商代号,它们能够提供至少一种由红色零件的供应商提供的零件;

SELECT DISTINCT SN FROM SPJB

WHERE PN IN

(SELECT FROM SPJB

JOIN SB ON =

JOIN PB ON =

WHERE =’红’) 数据库系统概论 SQL语言习题

(17) 取出由供应商S1提供零件的工程的代号;

SELECT DISTINCT JN

FROM SPJB WHERE SN=’S1’

(18) 取出所有这样的一些〈CITY,CITY〉二元组,使得第1个城市的供应商为第2个

城市的工程提供零件;

SELECT JN

FROM (SELECT DISTINCT PN, JN FROM SPJ

WHERE PN in (select distinct PN

from SPJ where SN='s1'))

GROUP BY JN

HAVING count(*)=(select count(*) from (SELECT DISTINCT PN FROM SPJ

WHERE SN='s1'))

(19) 取出所有这样的三元组〈CITY,PN CITY〉,使得第1个城市的供应商为第2个城市的工程提供指定的零件;

SELECT DISTINCT ,

FROM SPJB

JOIN SB ON =

JOIN JB ON =

(20) 重复(19)题,但不检索两个CITY值相同的三元组。

SELECT DISTINCT , , FROM SPJB

JOIN SB ON =

JOIN JB ON =

(21)重复(19)题,但不检索两个CITY值相同的三元组。

SELECT DISTINCT , , FROM SPJB

JOIN SB ON =

JOIN JB ON =

WHERE <>

12.以下面的数据库为例,用SQL完成以下检索。关系模式如下:

仓库(仓库号,城市,面积)←→ WAREHOUSE(WMNO,CITY,SIZE)

职工(仓库号,职工号,工资)←→ EMPLOYEE(WHNO,ENO,SALARY)

订购单(职工号,供应商号,订购单号,订购日期)←→ ORDER(SNO,SNO,ONO,DATE)

供应商(供应商号,供应商名,地址)←→ SUPPLIER(SNO,SNAME,ADDR)

(1) 检索在北京的供应商的名称。

SELECT SNAME FROM SUPPLIER WHERE ADDR==‘北京’

(2) 检索发给供应商S6的订购单号。

SELECT ONO FROM ORDER WHERE SNO=‘S6’

(3) 检索出职工E6发给供应商S6的订购单号。

SELECT ONO FROM ORDER WHERE ENO=‘E6’ AND SNO=‘S6’

(4) 检索出向供应商S3发过订购单的职工的职工号和仓库号。

SELECT ENO,WHNO FROM EMPLOYEE

WHERE ENO IN

(SELECT ENO

FROM ORDER

WHERE SNO=‘S3’)

或:SELECT ENO,WHNO FROM EMPLOYEE JOIN ORDER ON

=

WHERE =‘S3’ 数据库系统概论 SQL语言习题

(5) 检索出目前与S3供应商没有联系的职工信息。

SELECT ENO,WHNO

FROM EMPLOYEE

WHERE ENO NOT IN

(SELECT ENO FROM ORDER

WHERE SNO=‘S3’)

(6) 检索出目前没有任何订购单的供应商信息。

SELECT * FROM SUPPLIER

WHERE SNO NOT IN

(SELECT SNO FROM ORDER)

(7) 检索出和职工E1、E3都有联系的北京的供应商信息。

SELECT * FROM SUPPLIER

WHERE ADDR=‘北京’ AND

(EXISTS (SELECT * FROM ORDER WHERE SNO= AND

ENO=‘E3’))

AND (EXISTS (SELECT * FROM ORDER WHERE SNO= AND

ENO=‘E6’))

(8) 检索出目前和华通电子公司有业务联系的每个职工的工资。

SELECT ENO,SALARY FROM EMPLOYEE

WHERE ENO IN

(SELECT ENO FROM ORDER WHERE SNO IN

(SELECT SNO FROM SUPPLIER WHERE ADDR=‘华通电子公司’))

(9) 检索出与工资在1220元以下的职工没有联系的供应商的名称。

SELECT SNAME FROM SUPPLIER

WHERE SNO NOT IN

(SELECT SNO FROM ORDER WHERE ENO IN

(SELECT

SALARY<1220))

(10) 检索出向S4供应商发出订购单的仓库所在的城市。

SELECT CITY FROM WAREHOUSE

WHERE WHNO IN

(SELECT WHNO FROM EMPLOYEE

WHERE ENO IN

(SELECT ENO FROM ORDER WHERE SNO=‘S4’));

或:

SELECT CITY FROM WAREHOUSE

JOIN EMPLOYEE ON =

JOIN ORDER ON =

WHERE =‘S4’

(11) 检索出在上海工作并且向S6供应商发出了订购单的职工号。

SELECT ENO FROM EMPLOYEE

WHERE WHNO IN

ENO FROM EMPLOYEE WHERE 数据库系统概论 SQL语言习题

(SELECT WHNO FROM WAREHOUSE WHERE CITY=‘上海’)

AND (ENO IN SELECT ENO FROM ORDER WHERE

SNO=‘S6’);

或:

SELECT ENO FROM EMPLOYEE

JOIN WAREHOUSE ON =

JOIN ORDER ON =

WHERE =‘上海’ AND =‘S6’

(12) 检索出在广州工作并且只向S6供应商发出了订购单的职工号。

SELECT ENO FROM EMPLOYEE

WHERE WHNO IN (SELECT WHNO FROM WAREHOUSE WHERE

CITY=‘广州’)

AND ENO IN (SELECT ENO FROM ORDER WHERE SNO=‘S6’)

AND (NOT EXISTS (SELECT * FROM ORDER

WHERE SNO<>‘S6’ AND ENO=))

(13) 检索出由工资多于1230元的职工向北京的供应商发出的订购单号。

SELECT ONO FROM ORDER

WHERE ENO IN (SELECT ENO FROM EMPLOYEE WHERE

SALARY>1230)

AND SNO IN (SELECT SNO FROM SUPPLIER WHERE ADDR=‘北京’)

或:

SELECT ONO FROM ORDER

JOIN EMPLOYEE ON =

JOIN SUPPLIER ON =

WHERE >1230

AND SUPPLIER. ADDR=‘北京’

(14) 检索出仓库的个数。

SELECT COUNT(*) FROM WAREHOUSE

(15) 检索出有最大面积的仓库信息。

SELECT *

FROM WAREHOUSE OUTER

WHERE =(SELECT MAX(SIZE) FROM WAREHOUSE INNER)

(16) 检索出所有仓库的平均面积。

SELECT AVG(SIZE) FROM WAREHOUSE

(17) 检索出向S4供应商发出订购单的那些仓库的平均面积。

SELECT AVG(SIZE) FROM WAREHOUSE

WHERE WHNO IN

(SELECT WHNO FROM EMPLOYEE

WHERE ENO IN

(SELECT ENO FROM ORDER WHERE SNO=‘S4’))

(18) 检索出每个城市的供应商个数。

SELECT CITY,COUNT(SNO)

FROM SUPPLIER 数据库系统概论 SQL语言习题

GROUP BY CITY

(19) 检索出每个仓库中工资多于1220元的职工个数。

SELECT WHNO,COUNT(ENO)

FROM EMPLOYEE

WHERE SALARY>1220

GROUP BY WHNO

或:SELECT WHNO,COUNT(ENO)

FROM EMPLOYEE

GROUP BY WHNO

HAVING SALARY>1220

(20) 检索出和面积最小的仓库有联系的供应商的个数。

SELECT COUNT(DISTINCT SNO) FROM ORDER

WHERE ENO IN

(SELECT ENO FROM EMPLOYEE

WHERE WHNO IN

(SELECT WHNO FROM WAREHOUSE OUTER

WHERE =SELECT MIN(SIZE)

FROM WAREHOUSE INNER))

(21) 检索出工资低于本仓库平均工资的职工信息。

SELECT * FROM EMPLOYEE OUTER

WHERE < (SELECT AVG(SALARY) FROM EMPLOYEE

INNER

WHERE = GROUP BY

WHNO)

13.以下面的数据库为例,用SQL完成以下更新操作。关系模式如下:

仓库(仓库号,城市,面积)←→ WAREHOUSE(WMNO,CITY,SIZE)

职工(仓库号,职工号,工资)←→ EMPLOYEE(WHNO,ENO,SALARY)

订购单(职工号,供应商号,订购单号,订购日期)←→ ORDER(SNO,SNO,ONO,DATE)

供应商(供应商号,供应商名,地址)←→ SUPPLIER(SNO,SNAME,ADDR)

(1) 插入一个新的供应商元组(S9,智通公司,沈阳)。

INSERT INTO SUPPLIER VALUES(S9,’智通公司’,’沈阳’)

(2) 删除目前没有任何订购单的供应商。

DELETE FROM SUPPLIER

WHERE NOT EXISTS (SELECT * FROM ORDER WHERE

=)

或:

DELETE FROM SUPPLIER

WHERE SNO NOT IN (SELECT SNO FROM ORDER)

(3) 删除由在上海仓库工作的职工发出的所有订购单。

DELETE FROM ORDER

WHERE ENO IN

(SELECT ENO FROM EMPLOYEE 数据库系统概论 SQL语言习题

WHERE WHNO IN

(SELECT WHNO FROM WAREHOUSE

WHERE CITY=“上海”))

(4) 北京的所有仓库增加100m2的面积。

UPDATE WAREHOUSE SET SIZE=SIZE+100 WHERE CITY=’北京’

(5) 给低于所有职工平均工资的职工提高5%的工资。

UPDATE EMPLOYEE OUTER

SET =*1.05

WHERE <(SELECT AVG(SALARY) FROM EMPLOYEE

INNER)

14.教材P73 习题1——7题。

2023年6月21日发(作者:)

数据库系统概论 SQL语言习题

SQL语言 习题

一、单项选择题

1.SQL语言是 的语言,易学习。

A.过程化 B.非过程化

C.格式化 D.导航式

答案:B

2.SQL语言是 语言。

A.层次数据库 B.网络数据库

C.关系数据库 D.非数据库

答案:C

3.SQL语言具有 的功能。

A.关系规范化、数据操纵、数据控制

B.数据定义、数据操纵、数据控制

C.数据定义、关系规范化、数据控制

D.数据定义、关系规范化、数据操纵

答案:B

4.SQL语言的数据操纵语句包括SELECT,INSERT,UPDATE和DELETE等。其中最重要的,也是使用最频繁的语句是 。

A.SELECT B.INSERT C.UPDATE D.DELETE

答案:A

5.SQL语言具有两种使用方式,分别称为交互式SQL和 。

A.提示式SQL B.多用户SQL C.嵌入式SQL D.解释式SQL

答案:C

6.SQL语言中,实现数据检索的语句是 。

A.SELECT B.INSERT

C.UPDATE D.DELETE

答案:A

7.下列SQL语句中,修改表结构的是 。

A.ALTER B.CREATE

C.UPDATE D.INSERT

答案:A

第8到第11题基于这样的三个表即学生表S、课程表C和学生选课表SC,它们的结构如下:

S(S#,SN,SEX,AGE,DEPT)

C(C#,CN)

SC(S#,C#,GRADE)

其中:S#为学号,SN为姓名,SEX为性别,AGE为年龄,DEPT为系别,C#为课程号,CN为课程名,GRADE为成绩。

8.检索所有比“王华”年龄大的学生姓名、年龄和性别。正确的SELECT语句是 。

A.SELECT SN,AGE,SEX FROM S

WHERE AGE>(SELECT AGE FROM S

WHERE SN=’王华’)

B.SELECT SN,AGE,SEX FROM S

WHERE SN=’王华’

C.SELECT SN,AGE,SEX FROM S

WHERE AGE>(SELECT AGE

WHERE SN=’王华’)

D.SELECT SN,AGE,SEX FROM S 数据库系统概论 SQL语言习题

WHERE AGE>王华.AGE

答案:A

9.检索选修课程“C2”的学生中成绩最高的学生的学号。正确的SELECT语句是 。

A.SELECT S# FORM SC WHERE C#=’C2’ AND GRAD>=

(SELECT GRADE FORM SC

WHERE C#=’C2’)

B.SELECT S# FORM SC

WHERE C#=’C2’ AND GRADE IN

(SELECT GRADE FORM SC

WHERE C#=’C2’)

C.SELECT S# FORM SC

WHERE C#=’C2’ AND GRADE NOT IN

(SELECT GRADE FORM SC

WHERE C#=’C2’)

D.SELECT S# FORM SC

WHERE C#=’C2’ AND GRADE>=ALL

(SELECT GRADE FORM SC

WHERE C#=’C2’)

答案:D

10.检索学生姓名及其所选修课程的课程号和成绩。正确的SELECT语句是 。

A.SELECT S.SN,SC.C#,SC.GRADE

FROM S

WHERE S.S#=SC.S#

B.SELECT S.SN,SC.C#,SC.GRADE

FROM SC

WHERE S.S#=SC.GRADE

C.SELECT S.SN,SC.C#,SC.GRADE

FROM S JION SC ON S#=SC.S#

D.SELECT S.SN,SC.C#,SC.GRADE

FROM S JOIN SC

答案:C

11. 检索选修4门以上课程的学生总成绩(不统计不及格的课程),并要求按总成绩的降序排列出来。正确的SELECT语句是( )。

A. SELECT S#,SUM(GRADE) FROM SC

WHERE GRADE>=60

GROUP BY S#

ORDER BY 2 DESC

HAVING COUNT(*)>=4

B. SELECT 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 数据库系统概论 SQL语言习题

GROUP BY S#

HAVING COUNT(*)>=4

答案:B

12.假定学生关系是S(S#,SNAME,SEX,AGE),课程关系是C(C#,CNAME,TEACHER),学生选课关系是SC(S#,C#,GRADE)。

要查找选修“COMPUTER”课程的“女”学生姓名,将涉及到关系 。

A.S B.SC,C C.S,SC D.S,C,SC

答案:D

13.在数据库的如下两个表中,若雇员信息表的主关键字是雇员号,部门信息表中的主关键字是部门号。在下列所给的操作中,哪个不能执行______。

部门信息表 雇员信息表

雇员号 雇员名 部门号 工资

部门号 部门名 负责人

001 张山 02 2000

010 王宏 01 1200

056 马林 02 1000

101 赵明 04 1500

A.从雇员信息表中删除行(’010’,’王宏’,’01’,1200)

B.将行(’102’, ’赵明’, ’01’,1500)插入雇员信息表中

C.将雇员信息表中,雇员=’010’的工资改为1600元

D.将雇员信息表中,雇员=’101’的部门号改为’05’

14.数据库的两个表同上,若雇员信息表的主关键字是雇员号,部门信息表的主关键字是部门号。在部门信息表中,哪一行可以被删除_________。

A.部门号=’01’的行 B.部门号=’02’的行

C.部门号=’03’的行 D.部门号=’04’的行

15.若用如下的SQL语句创建一个student表:

CREATE TABLE student(NO C(4) NOT NULL,

NAME C(8) NOT NULL,

SEX C(2),

AGE N(2))

可以插入到student表中的是 。

A.(’1031’, ’曾华’,男,23) B.(’1031’, ’曾华’,NULL,NULL)

C.(NULL,’曾华’, ’男’, ’23’) D.(’1031’,NULL,’男’,23)

答案:B

16. 与HAVING子句一起使用的子句是( )。

A.GROUP BY B.ORDER BY C.WHERE D.JOIN

答案:A

17. FOREIGN KEY约束是( )约束。

A.实体完整性 B.参照完整性 C.用户自定义完整性 D.域完整性

答案:B

18. 视图创建完成后,数据字典中存放的是( )。

A. 查询语句 B.查询结果 C.视图的定义 D.所引用的基本表的定义

答案:C

19. 查询中需要统计元组的个数时,应使用( )函数。

A.SUM(列名) B.COUNT(列名) C.COUNT(*) D.AVG(列名)

答案:C

20. 查询中需要统计某列中值的个数应使用( )函数。

A.SUM(列名) B.COUNT(列名) C.COUNT(*) D.AVG(列名)

答案:B

01

02

03

04

业务部

销售部

服务部

财务部

王军

李建

刘伟

陈威

二、多项选择题 数据库系统概论 SQL语言习题

第1题到第4题基于这样的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成绩

1.查询所有比“王华”年龄大的学生姓名、年龄和性别。正确的SELECT语句是( AC )。

A.SELECT SN, AGE, SEX FROM S

WHERE AGE>(SELECT AGE FROM S WHERE SN='王华')

B.SELECT SN, AGE, SEX FROM S

WHERE AGE>ANY

( SELECT AGE FROM S WHERE SN='王华')

C.SELECT SN, AGE, SEX FROM S

WHERE AGE>ALL

( SELECT AGE FROM S WHERE SN='王华')

D.SELECT SN, AGE, SEX FROM S

WHERE AGE>SOME

( SELECT AGE FROM S WHERE SN='王华')

2.查询选修了课程号为“C2”的学生中成绩最高的学生的学号,正确的SELECT语句是( ABC )。

A.SELECT S# FROM SC WHERE C#='C2' AND GRADE>=ALL

( SELECT GRADE FROM SC WHERE C#='C2')

B.SELECT S# FROM SC WHERE C#='C2' AND GRADE IN

( SELECT MAX(GRADE) FROM SC WHERE C#='C2')

C.SELECT S# FROM SC WHERE C#='C2' AND GRADE=

( SELECT MAX(GRADE) FROM SC WHERE C#='C2')

D.SELECT S# FROM SC WHERE C#='C2' AND GRADE>=ANY

( SELECT GRADE FROM SC WHERE C#='C2')

3.查询至少选修了两门课程的学生的姓名,正确的SELECT语句是( ACD )。

A.SELECT FROM S JOIN SC ON S.S#=SC.S#

GROUP BY S.S# HAVING COUNT(*)>=2

B.SELECT FROM S

WHERE EXISTS

( SELECT S# FROM SC

GROUP BY S#

HAVING COUNT(*)>2 )

C.SELECT FROM S

JOIN SC S1 ON S.S#=SC.S#

JOIN SC S2 ON S1.S#=S2.S#

WHERE S1.C#!=S2.C#

D.SELECT FROM S WHERE S# IN

( SELECT S# FROM SC

GROUP BY S#

HAVING COUNT(*)>2 ) 数据库系统概论 SQL语言习题

4.查询所有没有被学生选过的课程的名称,正确的SELECT语句是( BD )。

A. SELECT FROM C JOIN SC ON SC.C#=C.C# WHERE C.C# IS NULL

B. SELECT FROM C LEFT JOIN SC ON SC.C#=C.C# WHERE SC.C# IS NULL

C. SELECT FROM SC LEFT JOIN C ON SC.C#=C.C# WHERE SC.C# IS NULL

D. SELECT FROM SC RIGHT JOIN C ON SC.C#=C.C# WHERE SC.C# IS

NULL

三、填空题

1.SQL是 。

答案:结构化查询语言

2.SQL语言的数据定义功能包括 ① 、 ② 、 ③

和 ④ 。

答案:①定义数据库 ②定义基本表 ③定义视图 ④定义索引

3.视图是一个虚表,它是从 ① 中导出的表。在数据库中,只存放视图的 ② ,不存放视图的 ③ 。

答案:①一个或几个基本表 ②定义 ③视图对应的数据

4.设有如下关系表R、S和T:

以R(BH,XM,XB,DWH)

S(DWH,DWM)

T(BH,XM,XB,DWH)

①实现R∪T的SQL语句是 。

②实现DWH=‘100’(R)的SQL语句是 。

③实现∏XM,XB(R)的SQL语句是 。

④实现∏XM,DWH(XB=‘女’(R))的SQL语句是 。

⑤实现R❖ S的SQL语句是 。

⑥实现∏XM,XB,DWM(XB=‘男’(R❖ S))的SQL语句是 。

答案:①SELECT * FROM R UNION SELECT * FROM T

②SELECT * FROM R WHERE DWH=’100’

③SELECT XM,XB FROM R

④SELECT XM,DWH FROM R WHERE XB=’女’

⑤SELECT ,,,, FROM R

JION S ON =

⑥SELECT ,, FROM R

JOIN S ON =

WHERE =’男’

5.设有如下关系表R:

R(No,NAME,SEX,AGE,CLASS)

主关键字是NO

其中NO为学号,NAME为姓名,SEX为性别,AGE为年龄,CLASS为班号。

写出实现下列功能的SQL语句。

①插入一个记录(25,’李明’,’男’,21,’95031’); 。

②插入’95031’班学号为30、姓名为’郑和’的学生记录; 。

③将学号为10的学生姓名改为’王华’; 。

④将所有“95101”班号改为’95091’; 。

⑤删除学号为20的学生记录; 。

⑥删除姓’王’的学生记录; 。

答案:

①INSERT INTO R VALUES(25,’李明’,’男’,21,’95031’) 数据库系统概论 SQL语言习题

②INSERT INTO R(NO,NAME,CLASS) VALUES(30,’郑和’,’95031’)

③UPDATE R SET NAME=’王华’ WHERE NO=10

④UPDATE R SET CLASS=’95091’WHERE CLASS=’95101’

⑤DELETE FROM R WHERE NO=20

⑥DELETE FROMR WHERE NAME LIKE ’王%’

四、简述与应用题

1.试述 SQL 语言的特点。

答:

(l)一体化。 SQL 语言集数据定义语言 DDL 、数据操纵语言 DML 、数据控制语言 DCL

的功能于一体。

(2)高度非过程化。用SQL 语言进行数据操作,只要提出“做什么”,而无需指明“怎么做”,因此无需了解存取路径,存取路径的选择以及 sQL 语句的操作过程由系统自动完成。

(3)面向集合的操作方式。 SQL 语言采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。

(4)以同一种语法结构提供两种使用方式。 SQL 语言既是自含式语言,又是嵌入式语言。作为自含式语言,它能够独立地用于联机交互的使用方式;作为嵌入式语言,它能够嵌入到高级语言程序中,供程序员设计程序时使用。

(5)语言简捷,易学易用。

2 .试述 sQL 的定义功能。

答:

SQL 的数据定义功能包括定义表、定义视图和定义索引。 SQL 语言使用 CREATE TABLE

语句建立基本表, ALTER TABLE 语句修改基本表定义, DROP TABLE 语句删除基本表;使用 CREATE INDEX 语句建立索引, DROP INDEX 语句删除索引;使用 CREATE VIEW

语句建立视图, DROP VIEW 语句删除视图。

3.叙述使用SQL语言实现各种关系运算的方法。

答: SQL语言没有提供关系的笛卡尔积、交和差运算。其他关系运算对应的SQL语句格式是:

R∪S SELECT * FROM R

UNION

SELECT* FROM S

选择 SELECT *

FROM <表>

WHERE <指定选择的条件>

投影 SELECT <投影字段列表>

FROM <表>

连接 SELECT <连接的字段列表>

FROM <表名1>

JION <表名2> ON <连接条件>

3.设有如下所示的三个关系,并假定这三个关系框架组成的数据模型就是用户子模式。

其中各个属性的含义如下:A#(商店代号)、ANAME(商店名)、WQTY(店员人数)、CITY(所在城市)、B#(商品号)、BNAME(商品名称)、PRICE(价格)、QTY(商品数量)。

试用SQL语言写出下列查询,并给出执行结果:

(1) 找出店员人数不超过100人或者在长沙市的所有商店的代号和商店名。

SELECT A#,ANAME

FROM A

WHERE WQTY<=100 OR CITY=‘长沙’ 数据库系统概论 SQL语言习题

(2) 找出供应书包的商店名。

SELECT FROM A

JOIN AB ON A.A#=AB.A#

JION B ON AB.B#=B.B#

WHERE =‘书包’

(3) 找出至少供应代号为256的商店所供应的全部商品的商店名和所在城市。

SELECT , FROM A,

JOIN AB ON A.A#=AB.A#

WHERE AB.B# IN

(SELECT AB.B#;

FROM AB

WHERE A#=“256”)

A

A# ANAME WQTY CITY

101

204

256

345

620

百货商店

长安商场

西单商场

铁道商店

太平洋百货

B#

1

2

3

4

A#

101

101

101

101

204

256

256

345

345

345

620

AB

B# QTY

1

2

3

4

3

1

2

1

2

4

4

105

42

25

104

61

241

91

141

18

74

125

15

89

500

76

长沙

北京

北京

长沙

412 上海

B

BNAME PRICE

钢笔

羽毛球

复读机

书包

21

5

300

76

4.设有图书登记表TS,具有属性:BNO(图书编号),BC(图书类别),BNA(书名),AU(著者),PUB(出版社)。按下列要求用SQL语言进行设计:

(1) 按图书馆编号BNO建立TS表的索引ITS。

(2) 查询,按出版社统计其出版图书总数。

(3) 删除索引ITS。 数据库系统概论 SQL语言习题

解:

(1) CREATE INDEX ITS ON TS(BNO)

(2) SELECT PUB,COUNT(BNO)

FROM TS

GROUP BY PUB

(3) DROP INDEX ITS

5.己知三个关系R(A,B,C)、S(A,D,E)和T(D,F),其中,名称相同的属性为关联属性,C、E为数值型属性。

试用SQL语句实现如下操作:

(1) 将R、S和T三个关系按关联属性建立一个视图R-S-T;

(2) 对视图R-S-T按属性A分组后,求属性C和E的平均值。

解:

(1) CREATE VIEW R_S_T

AS

SELECT R.A,B,C,S.D,E,F

FROM R

JOIN S ON R.A=S.A

JOIN T S.D=T.D

(2) SELECT AVG(C),AVG(E)

FROM R_S_T

GROUP BY A

6.设有关系R(A,B)和S(A,C),A为相同属性。

试用SQL语句实现:

(1) 查询属性C>50时,R中相关联的属性B之值。

(2) 当属性C=40时,将R中与之相关连的属性B值修改为b4。

解:

(1) SELECT B

FROM R JOIN S ON R.A=S.A

WHERE C>50

(2) UPDATE R

SET B=‘b4’

WHERE A IN

(SELECT A

FROM S

WHERE C=40)

7.已知R(A,B,C)和S(C,D,E)两个关系,如下图所示。

执行如下SQL语句:

(1) CREATE VIEW H(A,BC,C,D,E)

AS

SELECT A,B,R.C,D,E

FROM R JOIN S ON R.C=S.C;

(2) SELECT B,D,E

FROM H

WHERE C=‘C2’

试给出:

(1) 视图H;

(2) 对视图H的查询结果。

S

R

A B C C D E

a1 b1 c1 c1 d1 e1

a2 b2 c2 c2 d2 e2

a3 b3 c3 c3 d3 e3 数据库系统概论 SQL语言习题

解:

本题的结果如图所示。

对H的查询结果

视图H

A B C D E B D E

a1 b1 c1 d1 e1 b2 d2 e2

a2 b2 c2 d2 e2

a3 b3 c3 d3 e3

8.已知关系R如图所示。

A B C

97 b1 84

97 b2 92

97 b3 98

98 b1 72

98 b2 84

98 b3 95

99 b1 88

99 b2 94

试用SQL语句实现下列操作:

(1) 按属性A分组,求出每组中在属性C上的最大值和最小值,且将它们置于视图RVE中。

(2) 在视图RVE中查询属性A=‘98’的记录。

解:

(1) CREATE VIEW RVE(A,CMAX,CMIN)

AS SELECT A,MAX(C),MIN(C)

FROMR

GROUP BY A;

(2) SELECT *

FROM RVE

WHERE A=‘98’

9.已知学生表S和学生选课表SC。其关系模式如下:

S(SNo,SN,SD,PROV)

SC(SNO,CN,GR)

其中,SNO为学号,SN为姓名,SD为系名,PROV为省区,CN为课程名,GR为分数。

试用SQL语言实现下列操作:

(1) 查询“信息系”的学生来自哪些省区。

(2) 按分数降序排序,输出“英语系”学生选修了“计算机”课程的学生的姓名和分数。

解:

(1) SELECT DISTINCT PROV

FROM S

WHERE SD=’信息系’

(2) SELECT SN,GR

FROM S JOIN SC ON =

WHERE SD=’英语系’AND CN=’计算机’

ORDER BY GR DESC 数据库系统概论 SQL语言习题

10.设有学生表S(SNO,SN)(SNO为学号,SN为姓名)和学生选课表SC(SNO,CNO,CN,G)

(CNO为课程号,CN为课程名,G为成绩),试用SQL语言完成以下各题:

(1) 建立一个视图V_SSC(SN,SN,CN,CN,G),并按CNO升序排序;

(2) 从视图V-SSC上查询平均成绩在90分以上的SN、CN和G。

解:

(1) CREATE VIEW V_SSC(SNO,SN,CNO,CN,G)

AS SELECT ,,CNO,,SC.G

FROM S JOIN SC ON S.SNO=SC.SNO

ORDER BY CNO

(2) SELECT SN,CN,G

FROM V_SSC

GROUP BY SNO

HAVING AVG(G)>90

11.设有关系模式:

SB(SN,SNAME,CITY)

其中,S表示供应商,SN为供应商代号,SNAME为供应商名字,CITY为供应商所在城市,主关键字为SN。

PB(PN,PNAME,COLOR,WEIGHT)

其中P表示零件,PN为零件代号,PNAME为零件名字,COLOR为零件颜色,WEIGHT为零件重量,主关键字为PN。

JB(JN,JNAME, CITY)

其中,J表示工程,JN为工程编号,JNAME为工程名字,CITY为工程所在城市,主关键字为JN。

SPJB(SN,PN,JN,QTY)

其中,SPJ表示供应关系,SN是为指定工程提供零件的供应商代号,PN为所提供的零件代号,JN为工程编号,QTY表示提供的零件数量,主关键字为(SN,PN,JN),外部关键字为SN,PN,JN。

写出实现以下各题功能的SQL语句:

(1) 取出所有工程的全部细节;

SELECT * FROM JB

(2) 取出所在城市为上海的所有工程的全部细节;

SELECT * FROM JB WHERE CITY=’上海’

(3) 取出重量最轻的零件代号;

SELECT PN FROM PB

WHERE WEIGHT=

(SELECT MIN(WEIGHT) FROM PB)

(4) 取出为工程J1提供零件的供应商代号;

SELECT SN FROM SPJB WHERE JN=’J1’

(5) 取出为工程J1提供零件P1的供应商代号;

SELECT SN FROM SPJB WHERE JN=’Jl’ AND PN=’Pl’

(6) 取出由供应商S1提供零件的工程名称;

SELECT

FROM JB JOIN SPJB ON =

WHERE =’S1’

(7) 取出供应商S1提供的零件的颜色;

SELECT DISTINCT

FROM PB JOIN SPJB ON =

WHERE SPJB.SN=’S1’ 数据库系统概论 SQL语言习题

(8) 取出为工程J1或J2提供零件的供应商代号;

SELECT DISTINCT SN

FROM SPJB

WHERE JN=’J1’ OR JN=’J2’

(9) 取出为工程J1提供红色零件的供应商代号;

SELECT DISTINCT

FROM SPJB JOIN PB ON =

WHERE =’J1’AND =’红’

(10) 取出为所在城市为上海的工程提供零件的供应商代号;

SELECT DISTINCT SN

FROM SPJB JOIN JB ON =

WHERE CITY=’上海’

(11) 取出为所在城市为上海或北京的工程提供红色零件的供应商代号;

SELECT SN

FROM SPJB JOIN PB ON = JOIN JB ON =

WHERE COLOR=’红’

AND CITY IN (’上海’,’北京’)

或:

SELECT DISTINCT SN From SPJ

WHERE JN IN (SELECT JN FROM JB

WHERE CITY IN('上海','北京'))

AND PN IN (SELECT PN FROM PB

WHERE COLOR= '红')

(12) 取出供应商与工程所在城市相同的供应商提供的零件代号;

SELECT DISTINCT

FROM SPJB

JOIN SB ON =

JOIN JB ON =

WHERE =

(13) 取出上海的供应商提供给上海的任一工程的零件的代号;

SELECT DISTINCT PN

FROM SPJB

JOIN SB ON =

JOIN JB ON =

WHERE =’上海’

AND =’上海’

(14) 取出至少由一个和工程不在同一城市的供应商提供零件的工程代号;

SELECT DISTINCT JN FROM SPJ

WHERE EXISTS (SELECT * FROM SB

WHERE EXISTS(SELECT * FROM JB

WHERE = AND = AND <>))

(15) 取出上海供应商不提供任何零件的工程的代号;

SELECT DISTINCT JN FROM SPJB

WHERE JN NOT IN

(SELECT DISTINCT FROM SB JOIN SPJB ON =

WHERE =’上海’)

(16) 取出这样一些供应商代号,它们能够提供至少一种由红色零件的供应商提供的零件;

SELECT DISTINCT SN FROM SPJB

WHERE PN IN

(SELECT FROM SPJB

JOIN SB ON =

JOIN PB ON =

WHERE =’红’) 数据库系统概论 SQL语言习题

(17) 取出由供应商S1提供零件的工程的代号;

SELECT DISTINCT JN

FROM SPJB WHERE SN=’S1’

(18) 取出所有这样的一些〈CITY,CITY〉二元组,使得第1个城市的供应商为第2个

城市的工程提供零件;

SELECT JN

FROM (SELECT DISTINCT PN, JN FROM SPJ

WHERE PN in (select distinct PN

from SPJ where SN='s1'))

GROUP BY JN

HAVING count(*)=(select count(*) from (SELECT DISTINCT PN FROM SPJ

WHERE SN='s1'))

(19) 取出所有这样的三元组〈CITY,PN CITY〉,使得第1个城市的供应商为第2个城市的工程提供指定的零件;

SELECT DISTINCT ,

FROM SPJB

JOIN SB ON =

JOIN JB ON =

(20) 重复(19)题,但不检索两个CITY值相同的三元组。

SELECT DISTINCT , , FROM SPJB

JOIN SB ON =

JOIN JB ON =

(21)重复(19)题,但不检索两个CITY值相同的三元组。

SELECT DISTINCT , , FROM SPJB

JOIN SB ON =

JOIN JB ON =

WHERE <>

12.以下面的数据库为例,用SQL完成以下检索。关系模式如下:

仓库(仓库号,城市,面积)←→ WAREHOUSE(WMNO,CITY,SIZE)

职工(仓库号,职工号,工资)←→ EMPLOYEE(WHNO,ENO,SALARY)

订购单(职工号,供应商号,订购单号,订购日期)←→ ORDER(SNO,SNO,ONO,DATE)

供应商(供应商号,供应商名,地址)←→ SUPPLIER(SNO,SNAME,ADDR)

(1) 检索在北京的供应商的名称。

SELECT SNAME FROM SUPPLIER WHERE ADDR==‘北京’

(2) 检索发给供应商S6的订购单号。

SELECT ONO FROM ORDER WHERE SNO=‘S6’

(3) 检索出职工E6发给供应商S6的订购单号。

SELECT ONO FROM ORDER WHERE ENO=‘E6’ AND SNO=‘S6’

(4) 检索出向供应商S3发过订购单的职工的职工号和仓库号。

SELECT ENO,WHNO FROM EMPLOYEE

WHERE ENO IN

(SELECT ENO

FROM ORDER

WHERE SNO=‘S3’)

或:SELECT ENO,WHNO FROM EMPLOYEE JOIN ORDER ON

=

WHERE =‘S3’ 数据库系统概论 SQL语言习题

(5) 检索出目前与S3供应商没有联系的职工信息。

SELECT ENO,WHNO

FROM EMPLOYEE

WHERE ENO NOT IN

(SELECT ENO FROM ORDER

WHERE SNO=‘S3’)

(6) 检索出目前没有任何订购单的供应商信息。

SELECT * FROM SUPPLIER

WHERE SNO NOT IN

(SELECT SNO FROM ORDER)

(7) 检索出和职工E1、E3都有联系的北京的供应商信息。

SELECT * FROM SUPPLIER

WHERE ADDR=‘北京’ AND

(EXISTS (SELECT * FROM ORDER WHERE SNO= AND

ENO=‘E3’))

AND (EXISTS (SELECT * FROM ORDER WHERE SNO= AND

ENO=‘E6’))

(8) 检索出目前和华通电子公司有业务联系的每个职工的工资。

SELECT ENO,SALARY FROM EMPLOYEE

WHERE ENO IN

(SELECT ENO FROM ORDER WHERE SNO IN

(SELECT SNO FROM SUPPLIER WHERE ADDR=‘华通电子公司’))

(9) 检索出与工资在1220元以下的职工没有联系的供应商的名称。

SELECT SNAME FROM SUPPLIER

WHERE SNO NOT IN

(SELECT SNO FROM ORDER WHERE ENO IN

(SELECT

SALARY<1220))

(10) 检索出向S4供应商发出订购单的仓库所在的城市。

SELECT CITY FROM WAREHOUSE

WHERE WHNO IN

(SELECT WHNO FROM EMPLOYEE

WHERE ENO IN

(SELECT ENO FROM ORDER WHERE SNO=‘S4’));

或:

SELECT CITY FROM WAREHOUSE

JOIN EMPLOYEE ON =

JOIN ORDER ON =

WHERE =‘S4’

(11) 检索出在上海工作并且向S6供应商发出了订购单的职工号。

SELECT ENO FROM EMPLOYEE

WHERE WHNO IN

ENO FROM EMPLOYEE WHERE 数据库系统概论 SQL语言习题

(SELECT WHNO FROM WAREHOUSE WHERE CITY=‘上海’)

AND (ENO IN SELECT ENO FROM ORDER WHERE

SNO=‘S6’);

或:

SELECT ENO FROM EMPLOYEE

JOIN WAREHOUSE ON =

JOIN ORDER ON =

WHERE =‘上海’ AND =‘S6’

(12) 检索出在广州工作并且只向S6供应商发出了订购单的职工号。

SELECT ENO FROM EMPLOYEE

WHERE WHNO IN (SELECT WHNO FROM WAREHOUSE WHERE

CITY=‘广州’)

AND ENO IN (SELECT ENO FROM ORDER WHERE SNO=‘S6’)

AND (NOT EXISTS (SELECT * FROM ORDER

WHERE SNO<>‘S6’ AND ENO=))

(13) 检索出由工资多于1230元的职工向北京的供应商发出的订购单号。

SELECT ONO FROM ORDER

WHERE ENO IN (SELECT ENO FROM EMPLOYEE WHERE

SALARY>1230)

AND SNO IN (SELECT SNO FROM SUPPLIER WHERE ADDR=‘北京’)

或:

SELECT ONO FROM ORDER

JOIN EMPLOYEE ON =

JOIN SUPPLIER ON =

WHERE >1230

AND SUPPLIER. ADDR=‘北京’

(14) 检索出仓库的个数。

SELECT COUNT(*) FROM WAREHOUSE

(15) 检索出有最大面积的仓库信息。

SELECT *

FROM WAREHOUSE OUTER

WHERE =(SELECT MAX(SIZE) FROM WAREHOUSE INNER)

(16) 检索出所有仓库的平均面积。

SELECT AVG(SIZE) FROM WAREHOUSE

(17) 检索出向S4供应商发出订购单的那些仓库的平均面积。

SELECT AVG(SIZE) FROM WAREHOUSE

WHERE WHNO IN

(SELECT WHNO FROM EMPLOYEE

WHERE ENO IN

(SELECT ENO FROM ORDER WHERE SNO=‘S4’))

(18) 检索出每个城市的供应商个数。

SELECT CITY,COUNT(SNO)

FROM SUPPLIER 数据库系统概论 SQL语言习题

GROUP BY CITY

(19) 检索出每个仓库中工资多于1220元的职工个数。

SELECT WHNO,COUNT(ENO)

FROM EMPLOYEE

WHERE SALARY>1220

GROUP BY WHNO

或:SELECT WHNO,COUNT(ENO)

FROM EMPLOYEE

GROUP BY WHNO

HAVING SALARY>1220

(20) 检索出和面积最小的仓库有联系的供应商的个数。

SELECT COUNT(DISTINCT SNO) FROM ORDER

WHERE ENO IN

(SELECT ENO FROM EMPLOYEE

WHERE WHNO IN

(SELECT WHNO FROM WAREHOUSE OUTER

WHERE =SELECT MIN(SIZE)

FROM WAREHOUSE INNER))

(21) 检索出工资低于本仓库平均工资的职工信息。

SELECT * FROM EMPLOYEE OUTER

WHERE < (SELECT AVG(SALARY) FROM EMPLOYEE

INNER

WHERE = GROUP BY

WHNO)

13.以下面的数据库为例,用SQL完成以下更新操作。关系模式如下:

仓库(仓库号,城市,面积)←→ WAREHOUSE(WMNO,CITY,SIZE)

职工(仓库号,职工号,工资)←→ EMPLOYEE(WHNO,ENO,SALARY)

订购单(职工号,供应商号,订购单号,订购日期)←→ ORDER(SNO,SNO,ONO,DATE)

供应商(供应商号,供应商名,地址)←→ SUPPLIER(SNO,SNAME,ADDR)

(1) 插入一个新的供应商元组(S9,智通公司,沈阳)。

INSERT INTO SUPPLIER VALUES(S9,’智通公司’,’沈阳’)

(2) 删除目前没有任何订购单的供应商。

DELETE FROM SUPPLIER

WHERE NOT EXISTS (SELECT * FROM ORDER WHERE

=)

或:

DELETE FROM SUPPLIER

WHERE SNO NOT IN (SELECT SNO FROM ORDER)

(3) 删除由在上海仓库工作的职工发出的所有订购单。

DELETE FROM ORDER

WHERE ENO IN

(SELECT ENO FROM EMPLOYEE 数据库系统概论 SQL语言习题

WHERE WHNO IN

(SELECT WHNO FROM WAREHOUSE

WHERE CITY=“上海”))

(4) 北京的所有仓库增加100m2的面积。

UPDATE WAREHOUSE SET SIZE=SIZE+100 WHERE CITY=’北京’

(5) 给低于所有职工平均工资的职工提高5%的工资。

UPDATE EMPLOYEE OUTER

SET =*1.05

WHERE <(SELECT AVG(SALARY) FROM EMPLOYEE

INNER)

14.教材P73 习题1——7题。