数据库系统概论期末复习资料 下载本文

R S

A B C C D E

a1 b1 c1 c1 d1 e1

a2 b2 c2 c2 d2 e2

a3 b3 c3 c3 d3 e3 解: 本题的结果如图所示。 对H的查询结果 视图H

A B C D E B D E a1 b1 c1 d1 e1 b1 d2 e2 a2 b2 c2 d2 e2 b2 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,SC

WHERE SD=“英语系”AND CN=“计算机”AND S.SNO=SC.SNO ORDER BY GR DESC;

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 S.SNO, S.SN,CNO,SC.CN,SC.G FROM S,SC

WHERE 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 JB.JNAME FROM JB,SPJB

WHERE JB.JN=SPJB.JN AND SPJB.SN=‘S1’ (7).取出供应商S1提供的零件的颜色;

SELECT DISTINCT PB.COLOR FROM PB,SPJB

WHERE PB.PN=SPJB.PN AND SPJB.SN=‘S1’ (8).取出为工程J1或J2提供零件的供应商代号;

SELECT DISTINCT SN FROM SPJB

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

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

SELECT DISTINCT SPJB.SN FROM SPJB,PB

WHERE PB.PN=SPJB.PN AND SPJB.JN=‘J1’AND PB.COLOR=‘红’

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

SELECT DISTINCT SPJB.SN FROM SPJB, JB

WHERE SPJB.JN=JB.JN AND JB.CITY‘上海’

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

SELECT SPJB.SN FROM PB,JB SPJB

WHERE SPJB.PN=PB.PN AND JB.JN=SPJB.JN AND PB.COLOR=’红’ AND JB.CITY=’上海’ (12).取出供应商与工程所在城市相同的供应商提供的零件代号;

SELECT DISTINCT SPJB.PN FROM SB,JB,SPJB

WHERE SB.SN=SPJB.SN AND JB.JN=SPJB.JN AND SB.CITY=JB.CITY (13).取出上海的供应商提供给上海的任一工程的零件的代号;

SELECT SPJB.PN FROM SB,JB,SPJB

WHERE SB.SN=SPJB.SN AND JB.JN=SPJB.JN AND SB.CITY=’上海’

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

SELECT DISTINCT SPJB.JN FROM SB,JB,SPJB

WHERE SB.SN=SPJB.SN AND JB.JN=SPJB.JN AND SB.CITY<>JB.CITY (15).取出上海供应商不提供任何零件的工程的代号;

SELECT DISTINCT JN FROM SPJB

WHERE JN NOT IN

(SELECT DISTINCT SPJB.JN

FROM SB,SPJB

WHERE SB.SN=SPJB.SN AND SB.CITY=’上海’)

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

SELECT DISTINCT SPJB.SN

FROM PB,SPJB WHERE SPJB.PN IN (SELECT SPJB.PN

FROM SPJB,SB,PB

WHERE SB.SN=SPJB.SN AND PB.PN=SPJB.PN AND PB.COLOR=’红’) (17).取出由供应商S1提供零件的工程的代号;

SELECT DISTINCT SPJB.JN FROM SB,PB,SPJB

WHERE SB.SN=SPJB.SN AND PB.PN=SPJB.PN AND SB.SN=’S1’

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

SELECT DISTINCT SB.CITY, JB.CITY FROM SB,JB,SPJB

WHERE SB.SN=SPJB.SN AND JB.JN=SPJB.JN

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

SELECT DISTINCT SB.CITY, SPJB.PN, JB.CITY FROM SB,JB,SPJB

WHERE SB.SN=SPJB.SN AND JB.JN=SPJB.JN

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

SELECT DISTINCT SB.CITY, SPJB.PN, JB.CITY FROM SB, JB, SPJB

WHERE SB.SN=SPJB.SN AND JB.JN=SPJB.JN AND SB.CITY<>JB.CITY 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 SNO=“S6” AND ENO=“E6”;

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

SELECT ENO,WHNO FROM EMPLOYEE WHERE ENO IN

(SELECT ENO