3.设有一个SPJ数据库,包括S,P,J,SPJ四个关系模式:

3.设有一个SPJ数据库,包括S,P,J,SPJ四个关系模式:
S( SNO,SNAME,STATUS,CITY);
P(PNO,PNAME,COLOR,WEIGHT);
J(JNO,JNAME,CITY);
SPJ(SNO,PNO,JNO,QTY);
供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成;零件表P由零件代码(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT)组成;工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成;供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,表示某供应商供应某种零件给某工程项目的数量为QTY。
试用关系代数完成如下查询:
(1) 求供应工程J1零件的供应商号码SNO;
(2) 求供应工程J1零件P1的供应商号码SNO;
(3) 求供应工程J1零件为红色的供应商号码SNO;
(4) 求没有使用天津供应商生产的红色零件的工程号JNO;
(5) 求至少用了供应商S1所供应的全部零件的工程号JNO。
忘记讲了,要用关系代数完成查询
S表
son sname status city
s1 精益 20 天津
s2 盛锡 10 北京
s3 东方红 30 北京
s4 丰泰盛 20 天津
s5 为民 30 上海
p表
pno pname color weight
P1 螺母 红 12
P2 螺栓 绿 17
P3 螺丝刀 蓝 14
P4 螺丝刀 红 14
P5 凸轮 蓝 40
P6 齿轮 红 30
J表
JNO JNAME CITY
J1 三建 北京
J2 一汽 长春
J3 弹簧厂 天津
J4 造船厂 天津
J5 机车厂 唐山
J6 无线电厂 常州
J7 半导体厂 南京
SPJ表
SNO PNO JNO QTY
S1 P1 J1 200
S1 P1 J3 100
S1 P1 J4 700
S1 P2 J2 100
S2 P3 J1 400
S2 P3 J2 200
S2 P3 J4 500
S2 P3 J5 400
S2 P5 J1 400
S2 P5 J2 100
S3 P1 J1 200
S3 P3 J1 200
S4 P5 J1 100
S4 P6 J3 300
S4 P6 J4 200
S5 P2 J4 100
S5 P3 J1 200
S5 P6 J2 200
S5 P6 J4 500

1. ∏sno(δjno='j1'(spj))
2. ∏sno(δpno='p1'(δjno='j1'(spj)))
3. ∏sno(δjno='j1'(spj)∞δcolor='红'(p))
4. ∏jno(δcity!='天津'(s)∞spj∞δcolor!='红'(p))
5. ∏jno,pno(spj)÷∏pno(δsno='s1'(spj))

没有找到合适的符号,所以连接用的是∞。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-06-24
(1) 求供应工程J1零件的供应商号码SNO;
select b.SNO from SPJ a ,S b ,J c
where a.SNO = b.SNO
and a.JNO = c.JNO
and c.JNO = 'J1'

(2) 求供应工程J1零件P1的供应商号码SNO;
select b.SNO from SPJ a ,S b ,J c ,P d
where a.SNO = b.SNO
and a.JNO = c.JNO
and a.PNO = d.PNO
and b.JNO = 'J1'
and d.PNO = 'p1'

(3) 求供应工程J1零件为红色的供应商号码SNO;
select b.SNO from SPJ a ,S b ,J c ,P d
where a.JNO = a.JNO
and a.SNO = c.SNO
and a.PNO = d.PNO
and b.JNO = 'J1'
and d.COLOR = '红色'

(4) 求没有使用天津供应商生产的红色零件的工程号JNO;
select c.JNO from SPJ a ,S b ,J c ,P d
where a.SNO = b.SNO
and a.JNO = c.JNO
and a.PNO = d.PNO
and d.COLOR <> '红色'
and b.CITY <> '天津'

(5) 求至少用了供应商S1所供应的全部零件的工程号JNO。
这个题目有点问题,没有给出供应商和零件的联系
select JNO from SPJ a where a.SNO = 'S1' group by JNO,SNO having count(a.PNO) = (select count(PNO) from P)
我理解是每个供应商提供P表中所有零件
第2个回答  2019-04-13
去图书馆找这本数据库概论的习题解答吧。
相似回答