【说明】
供应商—零件—工程项目数据库由以下4个关系模式构成:
S(SNO,SNAME,STATUS,CITY)
P(PNO,PNAME,COLOR,WEIGHT,CITY)
J(JNO,TNAME,CITY)
SPJ(SNO,PNO,JNO,QTY)
其中,供应商S,零件P和工程项目J分别由供应商号(SNO),零件号(PNO)和工程项目号(JNO)唯一标识。供货SPJ是指由某个供应商向某个工程项目供应某些数量的某种零件。1. 【问题1】
请用SQL语言完成如下的操作。
①找出给北京的工程项目提供不同的零件号:
②将没有供货的所有工程项目从J中删除;
③查询这样的工程项目号:供给该工程项目的零件P1的平均供应量大于供给工程项目n的任何一种零件的最大供应量。
【问题2】
定义一个视图,它由所有这样的工程项目(工程项目号与所在城市名称)组成:它们由供应商S1供货且使用零件P1。
参考答案:[问题1]
①SELECTDISTlNCT SPJ.PNO
FROM SPJ,J
WHERE SPJ.JNO=J.JNO AND J.CITY=’北京’
②DELETE
FROM J
WHERE JNO NOT IN (
SELECT JNO
FROM SPJ);
③SELECT DISTINCT JNO
FROM SPJ
WHERE PNO=’P1’
GROUP BY JNO
HAVING AVG (QTS)>
(SELECT MAX (QTY)
FROM SPJ
WHERE JNO=’J1’);
[问题2]
CREATE VIEW J_S1_P1
AS SELECT J.JNO,J.CITY
FROM SPJ,J
WHERE SPJ.JNO=J.JNO AND SPJ.SNO=’S1’ AND SPJ.PNO=’P1’
解析: “找出给北京的工程项目提供不同的零件号”需要两个表(工程项目J和供货SPJ)的联合查找,要使用DISTINCT来消除重复项。
“将没有供货的所有工程项目从J中删除”,首先要在于查向内从供货(SPJ)表内将所有供货的工程项目号(JNO)查山,然后使用NOTIN在工程项目表(J)内将不含有这些 JNO的记录删除。
问题1中②这个查询需要使用条件语句having,还需要使用数学函数AVG、MAX。
考生还要熟悉视图、索引的语句,请参考有关教材,这里不做说明。