题目内容:


设有一个SPJ数据库,包括S,P,J,SPJ四个关系模式:
S(SNO,SNAME,STATUS,CITY);
P(PNO,PNAME,COLOR,WEIGHT);
J(JNO,JNANE,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。

今有若干数据如下:

创建表

创建S表:

create table S
(SNO CHAR(4) primary key,
SNAME CHAR(10),
ATATUS CHAR(2),
CITY CHAR(4));

创建P表:

create table P
(PNO CHAR(4) primary key,
PNAME CHAR(10),
COLOR CHAR(2),
WEIGHT SMALLINT);

创建J表:

create table J
(JNO CHAR(4) primary key,
JNAME CHAR(10),
CITY CHAR(4)
);

创建SPJ表:

create table SPJ
(SNO CHAR(4),
PNO CHAR(4),
JNO CHAR(4),
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)
);

插入数据

向S表中插入相应的数据:

INSERT INTO S
VALUES('S1','精益','20','天津'),
('S2','盛锡','10','北京'),
('S3','东方红','30','北京'),
('S4','丰泰盛','20','天津'),
('S5','为民','30','上海');

运行结果:

向P表中插入相应的数据:

INSERT INTO P
VALUES('P1','螺母','红',12),
('P2','螺栓','绿',17),
('P3','螺丝刀','蓝',14),
('P4','螺丝刀','红',14),
('P5','凸轮','蓝',40),
('P6','齿轮','红',30);

运行结果:

 向J表中插入相应的数据:

INSERT INTO J
VALUES('J1','三建','北京'),
('J2','一汽','长春'),
('J3','弹簧厂','天津'),
('J4','造船厂','天津'),
('J5','机车厂','唐山'),
('J6','无线电厂','常洲'),
('J7','半导体厂','南京');

运行结果:

 向SPJ表中插入相应的数据:

INSERT INTO SPJ
VALUES('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)求供应工程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.PNO=SPJ.PNO and P.COLOR='红'; 

 运行结果:

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

select  distinct JNO 
from SPJ spj1
where JNO not in(
select JNO from S,P,SPJ spj2
where spj2.SNO=S.SNO and S.CITY='天津' and spj2.PNO=P.PNO and 
P.COLOR='红');

运行结果:

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

select  distinct JNO from SPJ spj1
where not exists(
select * from SPJ spj2
where spj2.SNO='S1' and not exists(
select * from SPJ spj3
where spj1.JNO=spj3.JNO and spj2.PNO=spj3.PNO));

运行结果:

6)找出所有供应商的姓名和所在城市。

select SNAME,CITY
from S;

7)找出所有零件的名称、颜色、重量。

select PNAME,COLOR,WEIGHT
from P;

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

select JNO
from SPJ
where SNO='S1';

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

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

 10)找出上海厂商供应的所有零件号码。

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

11)找出使用上海产的零件的工程号码。

select JNAME from J 
where JNO in (
  select JNO from SPJ 
  where SNO in (
  select SNO from S where CITY='上海'));

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

select distinct  JNO
from SPJ
where SNO not in
(select SNO from S 
where CITY='天津');

  

更新数据和删除记录

1)把全部红色零件的颜色改为蓝色。

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

2)有S5供给J4的零件P6改为由S3供应,请做必要的修改。

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

3)从供应商关系中删除S2的记录,并从供应情况中删除相应的记录。

//供应关系表
delete from SPJ
where SNO='S2';
//供应商表
delete from S
where SNO='S2';

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐