【说明】 供应商—零件—工程项目数据库由以下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】 请用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。 考生还要熟悉视图、索引的语句,请参考有关教材,这里不做说明。