SQL基础综合练习一

本博文所用sql语句均在oracle环境下测试通过

设有一个SPJ数据库,包含S,P,J,SPJ 4个关系模型
S(SNO,SName,Status,City);
P(Pno,Pname,Color,Weight);
J(Jno,Jname,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组成。
今有若干数据如下:

//建立S表
create table S
( Sno VARCHAR(4) constraint pk_S primary key,
 Sname VARCHAR(10) not NULL,
  Status NUMBER(2),
    City   VARCHAR(7)
);
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','上海');


//建立P表
create table P
( Pno VARCHAR(4) constraint pk_P primary key,
   Pname VARCHAR(6) not null,
    Color  VARCHAR(2) check (Color in('红','黄','绿','蓝','紫')),
    Weight NUMBER(2) Constraint ck_P check(Weight>=0)
);
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 VARCHAR(2) primary key,
     Jname  VARCHAR(4) not NULL,
      City    VARCHAR(10) not NULL
);
INSERT into J(Jno,Jname,City) VALUES('J1','三建','北京');
INSERT into J(Jno,Jname,City) VALUES('J2','一汽','长春');
INSERT into J(Jno,Jname,City) VALUES('J3','弹簧厂','天津');
INSERT into J(Jno,Jname,City) VALUES('J4','造船厂','天津');
INSERT into J(Jno,Jname,City) VALUES('J5','机车厂','唐山');
INSERT into J(Jno,Jname,City) VALUES('J6','无线电厂','常州');
INSERT into J(Jno,Jname,City) VALUES('J7','半导体厂','南京');


//建立SPJ表
create table SPJ
(Sno VARCHAR(4),
  Pno VARCHAR(4),
   Jno VARCHAR(2),
   Qty  NUMBER(10)  CHECK(Qty>=0),
   constraint pk_SPJ primary key (Pno,Sno,Jno),
    Constraint fk_S Foreign key(Sno) references S(Sno),
    Constraint fk_P Foreign key(Pno) references P(Pno),
     Constraint fk_J Foreign key(Jno) references J(Jno)
);
INSERT into SPJ(Sno,Pno,Jno,Qty) VALUES('S1','P1','J1','200');
INSERT into SPJ(Sno,Pno,Jno,Qty) VALUES('S1','P1','J3','100');
INSERT into SPJ(Sno,Pno,Jno,Qty) VALUES('S1','P1','J4','700');
INSERT into SPJ(Sno,Pno,Jno,Qty) VALUES('S1','P2','J2','100');
INSERT into SPJ(Sno,Pno,Jno,Qty) VALUES('S2','P3','J1','400');
INSERT into SPJ(Sno,Pno,Jno,Qty) VALUES('S2','P3','J2','200');
INSERT into SPJ(Sno,Pno,Jno,Qty) VALUES('S2','P3','J4','500');
INSERT into SPJ(Sno,Pno,Jno,Qty) VALUES('S2','P3','J5','400');
INSERT into SPJ(Sno,Pno,Jno,Qty) VALUES('S2','P5','J1','400');
INSERT into SPJ(Sno,Pno,Jno,Qty) VALUES('S2','P5','J2','100');
INSERT into SPJ(Sno,Pno,Jno,Qty) VALUES('S3','P1','J1','200');
INSERT into SPJ(Sno,Pno,Jno,Qty) VALUES('S3','P3','J1','200');
INSERT into SPJ(Sno,Pno,Jno,Qty) VALUES('S4','P5','J1','100');
INSERT into SPJ(Sno,Pno,Jno,Qty) VALUES('S4','P6','J3','300');
INSERT into SPJ(Sno,Pno,Jno,Qty) VALUES('S4','P6','J4','200');
INSERT into SPJ(Sno,Pno,Jno,Qty) VALUES('S5','P2','J4','100');
INSERT into SPJ(Sno,Pno,Jno,Qty) VALUES('S5','P3','J1','200');
INSERT into SPJ(Sno,Pno,Jno,Qty) VALUES('S5','P6','J2','200');
INSERT into SPJ(Sno,Pno,Jno,Qty) VALUES('S5','P6','J4','500');

在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述

试用SQL完成下列操作

(1)找出所有供应商的姓名和所在城市

select Sname,city from S;

(2)找出所有零件的名称,颜色,重量

select Pname,color,Weight from P;

(3)找出使用供应商S1所供给零件的工程号码

//连接
select J.Jno from J,SPJ WHERE 
		SPJ.Sno = 'S1' AND J.jno= Spj.jno; 

//子查询
select Jno from J where JNO
		in (select Jno from SPJ where Sno = 'S1');

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

select Pno,Qty from SPJ where JNO = 'J2';

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

select Pno from P where Pno
	in(select pno from SPj where Sno 
			in (select Sno from S where City = '上海')
);

(6)找出使用上海产的零件的工程名称

select DISTINCT Jno from SPJ where Sno 
		in (select Sno from S where city = '上海'

);

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

select Jno from J where  not EXISTS
	(select * from P,SPJ where City = '天津' AND SPJ.Pno = P.Pno);

(8)把全部红色的零件改为蓝色

update table P set color = '蓝' where color = '红';

(9)由S5供应J4的零件P6改由S3供应,做出必要修改

update SPJ set Sno = 'S3'
	where Jno = 'J4' AND Pno = 'P6' AND Sno = 'S5'; 

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

先删除外键的SPJ表,再删除S表中相关记录

DELETE from SPJ where SPJ.Sno = 'S2';
DELETE from S where S.Sno = 'S2';

(11)请将(S1,J6,P4,200)插入到SPJ表中

INSERT into SPJ(Sno,Jno,Pno,Qty) VALUES ('S1','J6','P4','200');

猜你喜欢

转载自blog.csdn.net/practical_sharp/article/details/89716617