题目:设有如下关系数据库,供应商表S,零件表P,工程项目表J,供应情况表SPJ(某供应商供应某种零件给某工程项目的零件数量为 QTY):
供应商表S: SNO SNAME CITY
S1 大连机床厂 大连
S2 北京机床厂 北京
…… …… ……
零件表P: PNO PNAME COLOR WEIGHT
P1 螺母 红色 12
P2 螺栓 蓝色 17
…… …… …… ……
工业项目表J: JNO JNAME CITY
J1 不夜城 大连
J2 长春火车站 长春
…… …… ……
供应情况表SPJ: SNO PNO JNO QTY
S1 P1 J1 200
S1 P1 J3 100
…… …… …… ……
用 SQL 语言实现以下操作:
求至少使用了全部红色零件的工程编号及名称
------解决方案--------------------
- SQL code
--> 测试数据:[S1]if object_id('[S1]') is not null drop table [S1]create table [S1]([SNO] varchar(2),[SNAME] varchar(10),[CITY] varchar(4))insert [S1]select 'S1','大连机床厂','大连' union allselect 'S2','北京机床厂','北京'--> 测试数据:[P2]if object_id('[P2]') is not null drop table [P2]create table [P2]([PNO] varchar(2),[PNAME] varchar(4),[COLOR] varchar(4),[WEIGHT] int)insert [P2]select 'P1','螺母','红色',12 union allselect 'P2','螺栓','蓝色',17--> 测试数据:[J3]if object_id('[J3]') is not null drop table [J3]create table [J3]([JNO] varchar(2),[JNAME] varchar(10),[CITY] varchar(4))insert [J3]select 'J1','不夜城','大连' union allselect 'J2','长春火车站','长春'--> 测试数据:[SPJ]if object_id('[SPJ]') is not null drop table [SPJ]create table [SPJ]([SNO] varchar(2),[PNO] varchar(2),[JNO] varchar(2),[QTY] int)insert [SPJ]select 'S1','P1','J1',200 union allselect 'S1','P1','J3',100select JNO,JNAME from( select d.*,c.PNO,c.PNAME,c.COLOR from [SPJ] a inner join [P2] c on a.PNO=c.PNOinner join [J3] d on a.JNO=d.JNOwhere c.COLOR='红色')t group by JNO,JNAMEhaving COUNT(1)=(select COUNT(1) from [P2] where COLOR='红色')/*JNO JNAMEJ1 不夜城*/