日期:2014-05-18  浏览次数:20552 次

用SQL语句实现
题目:设有如下关系数据库,供应商表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 all
select '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 all
select '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 all
select '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 all
select 'S1','P1','J3',100

select JNO,JNAME from( 
select d.*,c.PNO,c.PNAME,c.COLOR from [SPJ] a 
inner join [P2] c on a.PNO=c.PNO
inner join [J3] d on a.JNO=d.JNO
where c.COLOR='红色')t group by JNO,JNAME
having COUNT(1)=(select COUNT(1) from [P2] where COLOR='红色')
/*
JNO    JNAME
J1    不夜城
*/