数据库系统概论第三章课后作业

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档