SQL Server——从入门到放弃(7)-- 第三章课后题

第三章的知识已经学完,今天的就是几道第三章的课后习题,也就是对前几周所学知识的一次总结练习

在这里插入图片描述
σ A = 10 ( S ) \sigma_{A=10}(S)

select *
from S
where A=10

Π A , B ( S ) \Pi_{A,B}(S)

select distinct A,B
from S

S T S\Join T

select A,B,S.C,S.D,E,F
from S,T
WHERE S.C=T.C AND S.D=T.D

S S . C = T . C T S \underset{S.C=T.C} \Join T

SELECT *
FROM S,T
WHERE S.C=T.C

S A < E T S \underset{A<E} \Join T

select *
from S,T
where S.A<T.E

Π C . D ( S ) × T \Pi_{C.D}(S)\times T

select S.C,S.D,T.*
from S,T

/*等价于*/

select S.C,S.D,T.C,T.D,E,F
from S,T

本来以为这两个式子不等价,但经过多次测试,运行结果相同,并且都没有去掉重复列。

在这里插入图片描述
4张表
在这里插入图片描述

S表

create table S (SNO char(5),
                SNAME char(10),
				STATUS smallint,
				CITY char (10))

insert into S(SNO,SNAME,STATUS,CITY)
values ('S1','精益','20','天津')
insert into S(SNO,SNAME,STATUS,CITY)
values ('S2','盛锡','10','北京')
insert into S(SNO,SNAME,STATUS,CITY)
values ('S3','东方红','30','北京')
insert into S(SNO,SNAME,STATUS,CITY)
values ('S4','丰泰盛','20','天津')
insert into S(SNO,SNAME,STATUS,CITY)
values ('S5','为民','30','上海')

P表

create table P (PNO char(5),
                PNAME char(10),
				COLOR char(5),
				WEIGHT smallint)

insert into P(PNO,PNAME,COLOR,WEIGHT)
values ('P1','螺母','红','12')
insert into P(PNO,PNAME,COLOR,WEIGHT)
values ('P2','螺栓','绿','17')
insert into P(PNO,PNAME,COLOR,WEIGHT)
values ('P3','螺丝刀','蓝','14')
insert into P(PNO,PNAME,COLOR,WEIGHT)
values ('P4','螺丝刀','红','14')
insert into P(PNO,PNAME,COLOR,WEIGHT)
values ('P5','凸轮','蓝','40')
insert into P(PNO,PNAME,COLOR,WEIGHT)
values ('P6','齿轮','红','30')

J表

create table J (JNO char(5),
                JNAME char(10),
				CITY CHAR(6))

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','半导体厂','南京')

SPJ表

create table SPJ ( SNO CHAR(5),
                   PNO CHAR(5),
                   JNO char(5),
                   QTY CHAR(5))

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','300')
insert into SPJ values ('S4','P6','J4','200')
insert into SPJ values ('S5','P2','J4','100')
insert into SPJ values ('S5','P3','J1','200')
insert into SPJ values ('S5','P6','J2','200')
insert into SPJ values ('S5','P6','J4','500')

⑴求供应工程J1零件的供应商号码SNO

select SNO
from SPJ
where JNO='J1'

⑵求供应工程J1零件P1的供应商号码SNO

select SNO
from SPJ
where JNO='J1'and PNO='P1'

⑶求供应工程J1零件为红色的供应商号码SNO

select SNO
from SPJ,P
where SPJ.PNO=P.PNO and JNO='J1' and COLOR='红'

⑷求没有使用天津供应商生产的红色零件的工程号JNO

select JNO
from SPJ
where JNO not in (select JNO
                  from SPJ,S,P
				  where S.CITY='天津'
                  )

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

SELECT DISTINCT JNO
FROM SPJ SPJX
WHERE NOT EXISTS 
	(SELECT * 
	FROM SPJ SPJY 
	 WHERE SPJY.SNO='S1' AND NOT EXISTS
		 (SELECT *
		  FROM SPJ SPJZ 
		  WHERE SPJZ.PNO=SPJY.PNO AND SPJZ.JNO=SPJX.JNO))

这个题是真的没想起来怎么做,百度了一下,找到了两种做法,以下是第二种做法

/*第一步,查询S1供应的零件号*/
select  distinct PNO
from SPJ
where SNO='S1'
/*运行结果为:P1,P2*/

/*第二步,查询哪一个工程既用零件P1又用零件P2*/
select JNO
from SPJ
where PNO='P1'and JNO in (select JNO from SPJ where Pno='P2')

在这里插入图片描述
⑴找出所有供应商的姓名和所在城市

select SNO,CITY
from S

⑵找出所有零件的名称、颜色、重量

select PNO,COLOR,WEIGHT
from P

⑶找出使用供应商S1所供应零件的工程号码

select JNO
from SPJ
where SNO='S1'

⑷找出工程项目J2使用的各种零件的名称及其数量

select PNAME,QTY
from SPJ,P
where P.PNO=SPJ.PNO and SPJ.JNO='J2'

⑸找出上海厂商供应的所有零件号码

select PNO
from SPJ,S
where S.SNO=SPJ.SNO and CITY='上海'

⑹找出使用上海产的零件的工程名称

select distinct JNAME
from SPJ,S,J
where S.SNO=SPJ.SNO and S.CITY='上海' and J.JNO=SPJ.JNO

⑺找出没有使用天津产的零件的工程号码

SELECT JNO
FROM   J
WHERE NOT EXISTS(SELECT *
                 FROM  SPJ,S
				 WHERE SPJ.JNO=J.JNO AND SPJ.SNO=S.SNO AND S.CITY='天津')

⑻把全部红色零件的颜色改为蓝色

update P
set COLOR=' 蓝'
where  COLOR='红'

⑼由S5供给J4的零件P6改为由S3供应,请做必要的修改

update SPJ
set SNO='S3'
where SNO='S5' and  JNO='J4' and PNO='P6'

⑽从供应商关系中删除S2的记录,并从供应关系中删除相应的记录

delete from S where SNO='S2'
delete from SPJ where SNO='S2'

⑾请将(S2,J6,P4,200)插入供应情况关系

insert into SPJ values ('S2','J6','P4',200)

在这里插入图片描述
建立视图

create view Vspj 
as
select SNO,SPJ.PNO,QTY
from SPJ,J
where SPJ.JNO=J.JNO and J.JNAME='三建'

⑴找出三建工程项目使用的各种零件代码及其数量

select distinct PNO,QTY
from Vspj

⑵找出供应商S1的供应情况

select *
from Vspj
where SNO='S1'

练习完成。

真是不练不知道,一练吓一跳啊,本来之前写博客时感觉知识掌握的足有八九成,今天练习才知道,也就一周,就只剩六成了,果然得好好复习,勤练习,勤重复。自己能感觉出来也不枉练习一次,没白练习啊。

发布了10 篇原创文章 · 获赞 19 · 访问量 7147

猜你喜欢

转载自blog.csdn.net/weixin_44664131/article/details/105121153
今日推荐