数据库练习

数据库练习

设有一个数据库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;

在这里插入图片描述

  • 6
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值