Bootstrap

SPJ数据库查询

起始

SQL语句建表

建表

后续图示为在SQL Server Management Studio中快捷创建的,并不是代码创建的。

CREATE TABLE S
( SNO CHAR(2) UNIQUE,
SNAME CHAR(6),
STATUS CHAR(2),
CITY CHAR(4));

CREATE TABLE J
(JNO CHAR(2),
JNAME CHAR(8),
CITY CHAR(4)
);
CREATE TABLE P
(PNO CHAR(2) UNIQUE,
PNAME CHAR(6),
COLOR CHAR(2),
WEIGHT INT
);

CREATE TABLE SPJ
(SNO CHAR(2),
PNO CHAR(2),
JNO CHAR(2),
QTY INT);

插入数据

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',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);

SPJ数据库,包括S、P、J、SPJ四张表

表的设计、内容如下:

供应商表——S表

S表设计

s表设计

SNO供应商代码
SNAME供应商名称
STATUS供应商状态
CITY供应商所在城市
S表内容

s表内容

零件表——P表

P表设计

p表设计

PNO零件代码
PNAME零件名
COLOR颜色
WEIGHT重量
P表内容

在这里插入图片描述

工程项目表——J表

J表设计

在这里插入图片描述

JNO工程项目代码
JNAME工程项目名
CITY工程项目所在城市
J表内容

在这里插入图片描述

供应情况表——SPJ表

SPJ表设计

在这里插入图片描述

SNO供应商代码
PNO零件代码
JNO工程项目代码
QTY供应数量(x供应商供应x种零件给x工程项目的数量)

关系:

在这里插入图片描述

在这里插入图片描述

S、P、J 设置类似,这里就只贴了一张 J 的。

SPJ表内容

在这里插入图片描述

用SQL语言完成如下查询:

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

需要在SPJ数据库的S表中查询 【姓名、城市】

新建查询,输入如下语句:

SELECT SNAME,CITY FROM SPJ.dbo.S

运行,结果如下:

在这里插入图片描述

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

需要在SPJ数据库的P表中查询 【名称、颜色、重量】

基础查询,运行如下语句:

SELECT PNAME,COLOR,WEIGHT FROM SPJ.dbo.P

运行结果如下:

在这里插入图片描述

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

需要在SPJ数据库的SPJ表中查询 【供应商代码[S1]、工程代码】

使用了where,运行语句:

SELECT SNO,JNO FROM SPJ.dbo.SPJ WHERE SNO = 'S1'

结果:

在这里插入图片描述

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

需要在SPJ数据库的P表中查询 【零件名称、零件数量】,同时连接SPJ表的PNO【项目工程代码J2】

多表连接查询

查询SPJ表中【J2】对应的PNO,再根据PNO去查询P表内的PNAME和WEIGHT。

运行语句:

SELECT PNAME,WEIGHT FROM SPJ.dbo.P
JOIN SPJ.dbo.SPJ
	ON SPJ.dbo.P.PNO = SPJ.dbo.SPJ.PNO
	WHERE JNO = 'J2'

或者这个语句:

SELECT PNAME,QTY
FROM SPJ,P
WHERE P.PNO=SPJ.PNO AND SPJ.JNO='J2';

结果:

在这里插入图片描述

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

需要在SPJ数据库的SPJ表中查询【零件号码】,条件是S表的【上海厂商】的SNO。

多表连接查询,先在S表中查询【上海厂商】对应的SNO,再根据这个SNO去SPJ表找对应的PNO,PNO即为所求。

运行语句:

SELECT DISTINCT PNO FROM SPJ.dbo.SPJ
JOIN SPJ.dbo.S
	ON SPJ.dbo.SPJ.SNO = SPJ.dbo.S.SNO
	WHERE CITY = '上海'

或者这个语句:

SELECT PNO
FROM SPJ,S
WHERE S.SNO=SPJ.SNO AND CITY='上海';

结果(此处没有删除相同项):

在这里插入图片描述

若要去掉相同项,则只需要在 [SELECT] 后边添加 [DISTINCT] 即可,即如下代码:

SELECT DISTINCT PNO FROM SPJ.dbo.SPJ
JOIN SPJ.dbo.S
	ON SPJ.dbo.SPJ.SNO = SPJ.dbo.S.SNO
	WHERE CITY = '上海'

结果:

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

需要在SPJ数据库的SPJ表中查询【工程名称】,条件是S表的【上海厂商】的SNO。

多表连接查询,先在S表中查询【上海厂商】对应的SNO,再根据这个SNO去SPJ表找对应的JNO,最后在J表通过JNO找到JNAME,JNAME即为所求。

运行语句:

SELECT JNAME FROM SPJ.dbo.J
WHERE JNO IN
	(SELECT DISTINCT JNO FROM SPJ.dbo.SPJ
		JOIN SPJ.dbo.S
		ON SPJ.dbo.SPJ.SNO = SPJ.dbo.S.SNO
		WHERE CITY = '上海')

或者语句:

SELECT JNAME FROM SPJ,S,J
	WHERE S.SNO=SPJ.SNO AND S.CITY='上海' AND J.JNO=SPJ.JNO;

结果(此处没有删除相同项):

在这里插入图片描述

若要去掉相同项,则只需要在 [SELECT] 后边添加 [DISTINCT] 即可,即如下代码:

SELECT DISTINCT JNO FROM SPJ.dbo.SPJ
JOIN SPJ.dbo.S
	ON SPJ.dbo.SPJ.SNO = SPJ.dbo.S.SNO
	WHERE CITY = '上海'

结果:

在这里插入图片描述

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

需要在SPJ数据库的SPJ表中查询【工程号码JNO】,条件是S表的【天津以外】零件的SNO。

七题第一种答案

多表连接查询,WHERE 的条件换为 CITY != ’天津‘ 即可

运行语句:

SELECT DISTINCT JNO FROM SPJ.dbo.SPJ
JOIN SPJ.dbo.S
	ON SPJ.dbo.SPJ.SNO = SPJ.dbo.S.SNO
	WHERE CITY != '天津'

结果(默认消除相同项):


七题第二种答案(网络)

运行语句:

SELECT JNO
FROM SPJ
WHERE JNO NOT IN(SELECT DISTINCT JNO
					FROM SPJ,S
					WHERE S.SNO=SPJ.SNO AND S.CITY='天津');

结果:

在这里插入图片描述

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

需要在SPJ数据库的P表中修改【COLOR】 红色 —>蓝色

更新数据

使用update语句进行修改,其语法格式如下:

UPDATE <表名> SET <列名> = 表达式 [,……n]
	[WHERE 更新条件]

运行语句:

UPDATE SPJ.dbo.P SET COLOR = '蓝'
	WHERE COLOR = '红'

结果:

在这里插入图片描述

(9)由S5供给J4的零件P6改为由S3供应

需要在SPJ数据库的SPJ表中查询【S5、J4、P6】,之后将该数据的SNO修改为S3。

运行语句:

UPDATE SPJ.dbo.SPJ SET SNO = 'S3'
	WHERE SNO = 'S5' AND JNO = 'J4' AND PNO = 'P6'

结果:

在这里插入图片描述

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

需要在SPJ数据库的S表中删除【S2】,并且在SPJ表中删除所有有关【S2】的记录。

删除数据

使用delete语句进行删除,其语法格式如下:

DELETE [ FROM ] <表名> [ WHERE 删除条件 ]

运行语句:

DELETE FROM SPJ.dbo.S
	WHERE SNO = 'S2';
DELETE FROM SPJ.dbo.SPJ
	WHERE SNO = 'S2';

结果:
在这里插入图片描述


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

需要在SPJ数据库的S表中删除【S2】,并且在SPJ表中删除所有有关【S2】的记录。

删除数据

使用delete语句进行删除,其语法格式如下:

DELETE [ FROM ] <表名> [ WHERE 删除条件 ]

运行语句:

DELETE FROM SPJ.dbo.S
	WHERE SNO = 'S2';
DELETE FROM SPJ.dbo.SPJ
	WHERE SNO = 'S2';

结果:

在这里插入图片描述


结束

;