数据库系统简明教程 第三章关系数据库 课后习题

题目链接http://blog.csdn.net/cnlht/article/details/13020739#comments

--创建SPJ数据库及插入数据

*/

--创建数据库

create database SPJ;

go

use SPJ;

go

--创建数据库表

create table S (

SNO char(9) primary key,

SNAME char(20),

STATUS char(10),

CITY char(20)

);

create table P(

PNO char(9) primary key,

PNAME char(20),

COLOR char(10),

WEIGHT smallInt

);

create table J(

JNO char(9) primary key,

JNAME char(20),

CITY char(20)

);

create table SPJ(

SNO char(9),

PNO char(9),

JNO char(9),

QTY smallInt,

primary key (SNO,PNO,JNO),

foreign key (SNO) references S(SNO),

foreign key (PNO) references P(PNO),

foreign key (JNO) references J(JNO)

);

--插入数据

insert into S values('S1','精益','20','天津');

insert into S values('S2','盛锡','10','北京');

insert into S values('S3','东方红','30','北京');

insert into S values('S4','丰泰盛','20','天津');

insert into S values('S5','为民','30','上海');

insert into P values('P1','螺母','红',12);

insert into P values('P2','螺栓','绿',17);

insert into P values('P3','螺丝刀','蓝',14);

insert into P values('P4','螺丝刀','红',14);

insert into P values('P5','凸轮','蓝',40);

insert into P values('P6','齿轮','红',30);

insert into J values('J1','三建','北京');

insert into J values('J2','一汽','长春');

insert into J values('J3','弹簧厂','天津');

insert into J values('J4','造船厂','天津');

insert into J values('J5','机车厂','唐山');

insert into J values('J6','无线电厂','常州');

insert into J values('J7','半导体厂','南京');

insert into SPJ values('S1','P1','J1',200);

insert into SPJ values('S1','P1','J3',100);

insert into SPJ values('S1','P1','J4',700);

insert into SPJ values('S1','P2','J2',100);

insert into SPJ values('S2','P3','J1',400);

insert into SPJ values('S2','P3','J2',200);

insert into SPJ values('S2','P3','J4',500);

insert into SPJ values('S2','P3','J5',400);

insert into SPJ values('S2','P5','J1',400);

insert into SPJ values('S2','P5','J2',100);

insert into SPJ values('S3','P1','J1',200);

insert into SPJ values('S3','P3','J1',200);

insert into SPJ values('S4','P5','J1',100);

insert into SPJ values('S4','P6','J3',200);

insert into SPJ values('S4','P6','J4',300);

insert into SPJ values('S5','P2','J4',200);

insert into SPJ values('S5','P3','J1',100);

insert into SPJ values('S5','P6','J2',200);

insert into SPJ values('S5','P5','J4',500);

1、通过SPJ数据库完成课后针对SPJ的查询练习

(1)

select SNO as 供应工程J1零件的供应商号码SNO from SPJ where JNO='J1';

(2)

select SNO as 供应工程J1零件P1的供应商号码SNO fromSPJ where JNO='J1' and PNO='P1';

(3)

select SNO as 供应工程J1零件为红色的供应商号码SNO from SPJ,P where SPJ.JNO='J1' and P.COLOR='红';

(4)

select SPJ.JNO as 没有使用天津供应商生产的红色零件的工程号JNO

from SPJ,S,P,J

where SPJ.SNO=S.SNO and SPJ.PNO=P.PNO andSPJ.JNO=J.JNO and S.CITY!='天津' and P.COLOR='红' and J.CITY!='天津';

(5)

select JNO as 至少用了供应商S1所供应的全部零件的工程号JNO

from SPJ

where SNO='S1';

2、根据SPJ数据库用SQL语句完成以下查询。

1)查询“天津”的供应商详细信息。

*/

select * from S where CITY='天津';

/*

2)查询不是“天津”的供应商代码。

*/

select * from S where CITY<>'天津';

/*

3)查询供应工程 J1零件的供应商代码。

*/

select distinct SNO as 供应商代码

from SPJ

where JNO='J1';

/*

4)查询供应商S1供应过的商品代码。

*/

select distinct PNO as 商品代码

from SPJ

where SNO='S1';

/*

5)查询供应商S1供应工程J1的零件种类有几种。

*/

select COUNT(*) as 零件种类

from SPJ

where SNO='S1' and JNO='J1';

/*

6)查询供应商S1供应工程J1的各种零件的零件代码和其数量和。

*/

select PNO as 零件代码,SUM(QTY) as 数量和

from SPJ

where SNO='S1' and JNO='J1'

group by PNO;

/*

7)查询J1工程使用的零件种类有几种。

*/

select COUNT(*) as 零件种类

from P

where EXISTS (

 select * from SPJ where JNO='J1' and P.PNO=SPJ.PNO

);

/*

8)查询J1工程使用的各种零件代码和其数量和。

*/

select PNO as 零件代码,SUM(QTY) as 数量和

from SPJ

where SPJ.JNO='J1'

group by PNO;

/*

9)查询J1工程使用的零件总数大于300的零件代码和数量。

*/

select PNO as 零件代码,SUM(QTY) as 数量

from SPJ

where SPJ.JNO='J1'

group by PNO

having SUM(QTY)>300;

/*

10)查询J1工程使用的各种零件,其数量至少大于J3使用的S2供应的所有零件数量和的,零件代码和数量。

 --J3使用S2供应的零件数为0

*/

select PNO as 零件代码,SUM(QTY) as 数量

from SPJ A

where A.JNO='J1'

group by PNO

having SUM(QTY)>(

select SUM(QTY)

from SPJ B

where B.JNO='J3' and B.SNO='S2'

);

/*

11)查询J1工程使用的各种零件,其数量至少大于J3使用的同类数量和的,零件代码和数量。

*/

select PNO as 零件代码,SUM(QTY) as 数量

from SPJ A

where A.JNO='J1'

group by A.PNO

having SUM(A.QTY)>ALL(

select SUM(B.QTY)

from SPJ B

where B.JNO='J3' and B.PNO=A.PNO

);

/*

12)查询至少使用了J1工程所用的几类零件的工程的工程号。

*/

select distinct JNO as 工程号

from SPJ a

where JNO<>'J1' and Not Exists (

       select*

       fromSPJ b

       whereb.JNO='J1' and b.PNO not in (

              select PNO

              from SPJ c

              where c.JNO=a.JNO

       )

);

/*

13)查询至少使用了所有红色零件的工程号。

*/

select JNO as 工程号

from SPJ a

where Not Exists (

       select*

       fromP

       whereCOLOR='红' and PNO NotIn (

              select PNO

              from SPJ b

              where b.JNO=a.JNO

       )

);

/*

14)查询使用了全部红色零件的工程号。

*/

select JNO as 工程号

from SPJ a

where Not Exists (

       select*

       fromP

       whereCOLOR='红' and PNO NotIn (

              select PNO

              from SPJ b

              where b.JNO=a.JNO

       )

);

/*

15)查询工程所在地与供应其零件的供应商在同一个城市的工程号和供应商号。

*/

select distinct JNO, SNO

from SPJ a

where EXISTS (

       select*

       fromS b

       whereb.SNO=a.SNO and EXISTS (

              select *

              from J c

              where a.JNO=c.JNO and c.CITY=b.CITY

       )

);

/*

16)查询没有使用天津供应商生产的红色零件的工程号JNO。

*/

select distinct JNO

from SPJ SPJ1

where JNO NOT IN (

       selectdistinct JNO

       fromSPJ a

       whereEXISTS (

              select *

              from S b1,P b2

              where b1.CITY='天津' and b2.COLOR='红' and b1.SNO=a.SNO and b2.PNO=a.PNO

       )

);

/*

17)查询至少使用了供应商S1供应的全部零件的工程号JNO。

*/

--(情况一:所使用的零件是S1供应的)

select distinct JNO

from SPJ SPJ1

where Not Exists (

       select* --S1供应的全部零件

       fromSPJ SPJ2

       whereSPJ2.SNO='S1' and SPJ2.PNO not in (

              select PNO

              from SPJ SPJ3

              where SPJ3.JNO=SPJ1.JNO and SPJ3.SNO='S1'

       )

);

--(情况二:所使用的零件不一定是S1供应的)

select distinct JNO

from SPJ SPJ1

where Not Exists (

       select* --S1供应的全部零件

       fromSPJ SPJ2

       whereSPJ2.SNO='S1' and SPJ2.PNO not in (

              select PNO

              from SPJ SPJ3

              where SPJ3.JNO=SPJ1.JNO and SPJ3.SNO='S1'

       )

);

/*

18)查询使用了全部上海产的零件的工程号JNO。

*/

--(情况一:不一定是上海供应商供应的零件)

select distinct JNO

from SPJ SPJ1

where Not Exists (

       select*

       fromS S2,SPJ SPJ2

       whereS2.CITY='上海' andSPJ2.SNO=S2.SNO and SPJ2.PNO Not In (

              select PNO

              from SPJ SPJ3

              where SPJ3.JNO=SPJ1.JNO

       )

);

--(情况二:是上海供应商供应的零件)

select distinct JNO

from SPJ SPJ1

where Not Exists (

       select*

       fromS S2,SPJ SPJ2

       whereS2.CITY='上海' andSPJ2.SNO=S2.SNO and SPJ2.PNO Not In (

              select PNO

              from SPJ SPJ3

              where SPJ3.JNO=SPJ1.JNO andSPJ3.SNO=SPJ2.SNO

       )

);

/*

19)查询没有使用J2所使用的所有零件的工程号JNO。

*/

select JNO

from SPJ SPJ1

where SPJ1.JNO<>'J2' and Not Exists (

       select*

       fromSPJ SPJ2

       whereSPJ2.JNO='J2' and SPJ2.PNO In (

              select PNO

              from SPJ SPJ3

              where SPJ3.JNO=SPJ1.JNO

       )

);

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏网络安全防护

黑客成员煽动DDos攻击全球银行,多个国内银行赫然在列

对网络安全有一定了解的用户一定听说过DDoS,DDoS攻击是目前最大的网络安全威胁之一,主要是通过将巨大流量引向目标来达到压垮和瘫痪网站的目的。就在12月11号...

1410
来自专栏互联网研发闲思录

平台开发中的表格

  表格在平台开发过程中很重要能够方便的查询使用,bootstrap开发过程中的 用的比较多的是bootstrap-table连接http://bootstra...

1955
来自专栏域名资讯

双拼域名sanwa.com被重新启用建站

近期,一个双拼域名sanwa.com被启用建站,该域名曾在在2016年11月以3.15万美金(近22万元)的价格结拍,随后成功交易。

2115
来自专栏腾讯大讲堂的专栏

【揭秘】手机支付病毒的真实面孔

随着移动支付的不断普及,手机支付病毒开始逐渐蔓延。手机病毒是如何在不经意之间道歉我们的钱财呢?本期大讲堂将联合腾讯手机管家首发2014年手机支付安全报告,揭开手...

2409
来自专栏AhDung

【T-SQL】分布抽取部分数据

好吧,我确实不知道该怎么起这个标题,整了一个“分布”,感觉还有点高档,其实没啥技术含量,看完你就知道了。情况是这样,刚刚接到一个临时任务,需要让几个营业点的销售...

1042
来自专栏黑白安全

印度电力公司遭遇黑客攻击,勒索 1 RS Core 或 1000 万卢比

上周,黑客攻占了印度 Uttar Haryana Bijli Vitran Nigam(UHBVN)电力公司的计算机系统,窃取了客户的账单数据。 攻击者对电力公...

721
来自专栏域名资讯

多起交易低调进行:“民兵”域名买家揭晓

在域名圈中时常传出域名交易的消息,也有很多低调进行的域名交易,即使是交易完成了。也很难得知买卖双方的信息。近日,外媒又曝出一批品相不错的域名的相关动...

2248
来自专栏域名资讯

全球财富500强启用“服装+”域名建站

12月15日,据域名博主Jamie Zoch在个人网站上曝料称,美资企业Jabil Circuit(捷普集团)——全球最大的电子合约制造服务商(EM...

2060
来自专栏安恒信息

央视曝“盗信僵尸”病毒

近日,手机支付类病毒成为媒体和广大手机用户关注焦点。3月25日,央视新闻报道了用户因玩手机游戏而遭遇“盗信僵尸”的手机支付病毒,被窃取了手机话...

2745
来自专栏杨建荣的学习笔记

使用sed做特殊的行列转换(r2笔记40天)

行列转换在数据库,开发语言中都是一个津津乐道的话题,今天来简单演示一个使用sed所作的特殊行列转换。 日志的内容如下: append data from MIG...

3047

扫码关注云+社区

领取腾讯云代金券