数据库系统概论第三章课后作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章作业参考答案
3.用SQL 语句建立第二章习题5中的4个表。CREATE TABLE S
(SNO CHAR(3)primary key,
SNAME CHAR(10)not null,
STATUS CHAR(2),
CITY CHAR(10));
CREATE TABLE P
(PNO CHAR(3)primary key,
PNAME CHAR(10),
COLOR CHAR(4),
WEIGHT INT);
CREATE TABLE J
(JNO CHAR(3)primary key,
JNAME CHAR(10),
CITY CHAR(10));
CREATE TABLE SPJ
(SNO CHAR(3),
PNO CHAR(3),
JNO CHAR(3),
QTY INT
Primary key(sno,pno,jno));
4.针对上题中建立的4个表试用SQL 语言完成第二章习题5中的查询。
(1)求供应工程J1零件的供应商号码SNO;
关系代数:
SELECT SNO
FROM SPJ
WHERE JNO =‘J1’;
(2)求供应工程J1零件P1的供应商号码SNO;
关系代数:
SELECT SNO
FROM SPJ
WHERE JNO =‘J1’AND PNO =‘P1’;
(3)求供应工程J1零件为红色的供应商号码SNO;
关系代数:
FROM SPJ
WHERE JNO =‘J1’
AND PNO IN
(SELECT PNO
FROM P
WHERE COLOR =‘红’);
或者是
SELECT SNO
FROM SPJ,P
WHERE JNO =‘J1’
AND SPJ.PNO = P.PNO
AND COLOR =‘红’;
(4)求没有使用天津供应商生产的红色零件的工程号JNO;
注意:从J表入手,以包含那些尚未使用任何零件的工程号。
关系代数:
SELECT JNO
FROM J
WHERE NOT EXISTS
FROM SPJ
WHERE SPJ.JNO = J.JNO
AND SNO IN
(SELECT SNO
FROM S
WHERE CITY =’天津’)AND PNO IN
(SELECT PNO
FROM P
WHERE COLOR =’红’));或者
SELECT JNO
FROM J
WHERE NOT EXISTS
(SELECT *
FROM SPJ,S,P
WHERE SPJ.JNO = J.JNO
AND SPJ.SNO = S.SNO
AND SPJ.PNO = P.PNO
AND S.CITY =‘天津’
AND P.COLOR =‘红’);
(5)求至少用了供应商S1所供应的全部零件的工程号JNO(类似于《概论》P113例44)。
关系代数:
上面公式中除号前的部分是所有工程与该工程所用的零件,除号后的部分是S1所供应的全部零件号。对于SPJ表中的某一个JNO,如果该工程使用的所有零件的集合包含了S1所供应的全部零件号,则该JNO 符合本题条件,在除法运算的结果集中。
分析:本查询的解析可以参考第二章第5题,用ALPHA 语言的逻辑蕴涵来表达。上述查询可以抽象为:要求这样的工
程x,使为真。即,对于所有的零件y,满足逻辑蕴涵p→q:P 表示谓词“供应商S1供应了零件y”;
q表示谓词“工程x选用了零件y”。即,只要“供应商S1供应了零件y”为真,则“工程x选用了零件y”为真。
逻辑蕴涵可以转换为等价形式:
它所表达的语义为:不存在这样的零件y,供应商S1 供应了y,而工程x没有选用y。
SELECT DISTINCT JNO
FROM SPJ SPJZ
WHERE NOT EXISTS
(SELECT *
FROM SPJ SPJX /*用别名将父查询与子查询中
WHERE SNO =‘S1’的SPJ表区分开* /
AND NOT EXISTS
(SELECT *
FROM SPJ SPJY
WHERE SPJY.PNO=SPJX.PNO
AND SPJY.JON = SPJZ.JNO));
5.针对习题3中的4个表试用SQL 语言完成以下各项(1)找出所有供应商的姓名和所在城市。
SELECT SNAME,CITY
FROM S;
(2)找出所有零件的名称、颜色、重量。
SELECT PNAME,COLOR,WEIGHT
FROM P;
(3)找出使用供应商S1所供应零件的工程号码。SELECT DISTINCE JNO
FROM SPJ
WHERE SNO =‘S1’;
(4)找出工程项目J2使用的各种零件的名称及其数量。SELECT PNAME,QTY
FROM P,SPJ
WHERE P.PNO = SPJ.PNO AND SPJ.JNO =‘J2’;(5)找出上海厂商供应的所有零件号码。
SELECT DISTINCT PNO
FROM SPJ
WHERE SNO IN
(SELECT SNO
FROM S
WHERE CITY =‘上海’);
(6)找出使用上海产的零件的工程名称。
SELECT JNAME
FROM J,SPJ,S
WHERE J.JNO = SPJ.JNO
AND SPJ.SNO = S.SNO
AND S.CITY =‘上海’;
或者
SELECT JNAME
FROM J
WHERE JNO IN
(SELECT JNO