数据库练习
设有一个数据库SPJ数据库,包括S、P、J及SPJ 4个关系模式:
S(SNO,SNAME,STATUS,CITY);
P(PNO,PNAME,COLOR,WEINGHT);
J(JNO,JNAME,CITY);
SPJ(SNO,PNO,JNO,QTY)。
供应商表由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)。
零件表由零件代码(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT)组成。
工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成。
供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,表示某供应商供应某种零件给某工程项目的数量为QTY。
建表
j表
p表
s表
spj表
使用SQL语言完成以下查询:
(1)求供应工程J1零件的供应商号码SNO;
(2)求供应工程J1零件P1的供应商号码SNO;
(3)求供应工程J1零件为红色的供应商号码SNO;
(4)求没有使用天津供应商生产的红色零件的工程好JNO;
(5)求至少用了供应商S1所供应的全部零件的工程和JNO;
(1)求供应工程J1零件的供应商号码SNO;
select SNO from spj where jno ='j1';
(2)求供应工程J1零件P1的供应商号码SNO;
select SNO from spj where JNO='j1' and PNO='p1';
(3)求供应工程J1零件为红色的供应商号码SNO;
select SNO from spj,p where JNO='j1' and p.COLOR='红' and spj.PNO= p.PNO;
(4)求没有使用天津供应商生产的红色零件的工程号JNO;
select JNO from j where JNO not in(select JNO from s,p,spj where s.CITY='天津' and p.COLOR='红' and spj.PNO=p.PNO and spj.SNO =s.SNO);
(5)求至少用了供应商S1所供应的全部零件的工程和JNO;
至少用了的反面即为没有使用,可以先求出没有使用的情况,再使用not in 或者 not exists 来求出题目所要求的记录。
select jno
from j
where not exists
(select *from spj
where spj.sno='S1' and
not exists(select *from p
where spj.pno=p.pno and spj.jno=j.jno
));
练习2
(1)找出所有供应商的姓名和所在城市;
select sname,city from s
(2)找出所有零件的名称 、颜色、重量;
select pname,color,weight from p;
(3)找出使用供应商S1所供应零件的工程号码;
select jno from spj where sno='S1';
(4)找出工程项目J2使用的各种零件的名称及其数量;
select p.pname,spj.qty from p,spj where p.pno=spj.pno and spj.jno='J2';
(5)找出上海厂商供应的所有零件号码;
select p.PNO from spj,p,s where s.CITY='上海' and spj.PNO =p.PNO and s.SNO=spj.SNO;
(6)找出使用上海产的零件的工程名称;
select j.JNAME from j,spj,s where s.CITY='上海' and spj.JNO=j.JNO and spj.SNO=s.SNO ;
(7)找出没有使用天津产的零件的工程号码;
select distinct spj.jno from spj,s where s.city!='天津' and spj.sno=s.sno;