起始
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表设计
SNO | 供应商代码 |
---|---|
SNAME | 供应商名称 |
STATUS | 供应商状态 |
CITY | 供应商所在城市 |
S表内容
零件表——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';
结果: