《数据库原理》部分习题解析2
P123 3.
(1)
SELECT *
FROM S
WHERE A=10;
(2)
SELECT A,B
FROM S;
(3)
SELECT A,B,S.C,S.D,E,F
FROM S,T
WHERE S.C=T.C AND S.D=T.D;
(4)
SELECT S.* , T.*
FROM S,T
WHERE S.C=T.C;
(5)
SELECT S.* , T.*
FROM S,T
WHERE S.A<T.E;
(6)
SELECT SCD.C,SCD.D,T.C,T.D,E,F
FROM T,(SELECT DISTINCT C,D FROM S)
AS SCD(SCD.C,SCD.D) ;
P123 4.
(1) 求供应工程 J1 零件的供应商号码 SNO
SELECT DISTINCT SNO
FROM SPJ
WHERE JNO = 'J1';
图4-1 求供应工程 J1 零件的供应商号码 SNO
(2)求供应工程 J1 零件 P1 的供应商号码 SNO
SELECT DISTINCT SNO
FROM SPJ
WHERE JNO = 'J1' AND PNO = 'P1';
图4-2 求供应工程 J1 零件 P1 的供应商号码 SNO
(3)求供应工程 J1 零件为红色的供应商号码 SNO
SELECT DISTINCT SPJ.SNO
FROM SPJ
JOIN P ON SPJ.PNO = P.PNO
WHERE SPJ.JNO = 'J1' AND P.COLOR = '红';
图4-3 求供应工程 J1 零件为红色的供应商号码 SNO
(4)求没有使用天津供应商生产的红色零件的工程号 JNO
SELECT DISTINCT JNO
FROM SPJ
WHERE JNO NOT IN (
SELECT DISTINCT SPJ.JNO
FROM SPJ
JOIN S ON SPJ.SNO = S.SNO
JOIN P ON SPJ.PNO = P.PNO
WHERE S.CITY = '天津' AND P.COLOR = '红'
);
图4-4 求没有使用天津供应商生产的红色零件的工程号 JNO
(5)求至少用了供应商 S1 所供应的全部零件的工程号 JNO
SELECT JNO
FROM SPJ AS SPJ1
GROUP BY JNO
HAVING NOT EXISTS (
SELECT *
FROM SPJ AS SPJ2
WHERE SNO = 'S1' AND PNO NOT IN (
SELECT PNO
FROM SPJ AS SPJ3
WHERE SPJ3.JNO = SPJ1.JNO
)
);
图4-5 求至少用了供应商 S1 所供应的全部零件的工程号 JNO
P123 5.
(1)找出所有供应商的姓名和所在城市
SELECT SNAME, CITY
FROM S;
图5-1 找出所有供应商的姓名和所在城市
(2)找出所有零件的名称、颜色、重量
SELECT PNAME, COLOR, WEIGHT
FROM P;
图5-2 找出所有零件的名称、颜色、重量
(3)找出使用供应商 S1 所供应零件的工程号码
SELECT DISTINCT JNO
FROM SPJ
WHERE SNO = 'S1';
图5-3 找出使用供应商 S1 所供应零件的工程号码
(4)找出工程项目 J2 使用的各种零件的名称及其数量
SELECT P.PNAME, SPJ.QTY
FROM SPJ
JOIN P ON SPJ.PNO = P.PNO
WHERE SPJ.JNO = 'J2';
图5-4 找出工程项目 J2 使用的各种零件的名称及其数量
(5)找出上海厂商供应的所有零件号码
SELECT DISTINCT PNO
FROM SPJ
JOIN S ON SPJ.SNO = S.SNO
WHERE S.CITY = '上海';
图5-5 找出上海厂商供应的所有零件号码
(6)找出使用上海产的零件的工程名称
SELECT DISTINCT J.JNAME
FROM SPJ
JOIN S ON SPJ.SNO = S.SNO
JOIN J ON SPJ.JNO = J.JNO
WHERE S.CITY = '上海';
图5-6 找出使用上海产的零件的工程名称
(7)找出没有使用天津产的零件的工程号码
SELECT DISTINCT JNO
FROM J
WHERE JNO NOT IN (
SELECT DISTINCT SPJ.JNO
FROM SPJ
JOIN S ON SPJ.SNO = S.SNO
WHERE S.CITY = '天津'
);
图5-7 找出没有使用天津产的零件的工程号码
(8)把全部红色零件的颜色改成蓝色
UPDATE P
SET COLOR = '蓝'
WHERE COLOR = '红';
图5-8 把全部红色零件的颜色改成蓝色
(9)由 S5 供给 J2 的零件 P6 改为由 S3 供应
SELECT QTY FROM SPJ
WHERE SNO = 'S5' AND PNO = 'P6' AND JNO = 'J2';
DELETE FROM SPJ
WHERE SNO = 'S5' AND PNO = 'P6' AND JNO = 'J2';
INSERT INTO SPJ VALUES('S3', 'P6', 'J2', 200);
图5-9 由 S5 供给 J2 的零件 P6 改为由 S3 供应
(10)从供应商关系中删除 S2 的记录,并从供应情况关系中删除相应的记录
DELETE FROM SPJ
WHERE SNO = 'S2';
DELETE FROM S
WHERE SNO = 'S2';
图5-10 从供应商关系中删除 S2 的记录,并从供应情况关系中删除相应的记录
(11)将 (S2, J6, P4, 200) 插入供应情况关系
INSERT INTO S VALUES('S2', '盛锡', 10, '北京');
INSERT INTO SPJ VALUES('S2', 'P4', 'J6', 200);
图5-11 将 (S2, J6, P4, 200) 插入供应情况关系
P123 9.
创建视图
CREATE VIEW G
AS
SELECT SNO,PNO,QTY
FROM SPJ,J
WHERE J.JNO=SPJ.JNO AND JNAME='三建';
(1)找出三建项目使用的各种零件代码PNO和其数量
SELECT DISTINCT PNO,QTY
FROM G;
(2)找出供应商S1的三建工程情况
SELECT *
FROM G
WHERE SNO='S1';
图9-1 供应商S1的三建工程情况