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