J3 J4 J5 J6
螺丝刀 螺丝刀 凸轮 齿轮 蓝 红 蓝 红 12 12 45 28 表7 工程表P
PNO P1 P2 P3 P4 P5 P6 P7
表8 供应情况表SPJ
SNO S1 S1 S1 S1 S2 S2 S2 S2 S2 S2 S3 S3 PNO P1 P1 P1 P2 P3 P3 P3 P3 P5 P5 P1 P1 JNO J1 J3 J4 J1 J1 J2 J3 J5 J1 J2 J1 J2 QTY 300 150 700 200 350 200 400 500 350 100 200 600 PNAME 二汽 电子厂 车床厂 半导体厂 三建 模具厂 无线电厂 CITY 长春 北京 天津 沈阳 南京 唐山 北京 S3 S3 S4 S4 S4 S4 S5 S5 S5 S5 参考答案:
P3 P5 P4 P6 P6 P7 P3 P3 P6 P6 J1 J4 J2 J3 J4 J3 J2 J4 J1 J5 150 300 200 100 300 400 100 500 300 500 INSERT INTO S VALUES('S1', '东丰', '天津'); INSERT INTO J VALUES('J1', '螺母', '红', 15); INSERT INTO P VALUES('P1', '二汽', '长春'); INSERT INTO SPJ VALUES('S1', 'P1', 'J1', 300); (12)查询全体供应商的所有信息; 参考答案: SELECT * FROM S;
(13)查询全体供应商的姓名和所在城市; 参考答案:
SELECT SNAME, CITY FROM S; (14)查询有供应商的城市; 参考答案:
SELECT DISTINCT CITY FROM S;
(15)查询重量在30以上或颜色为“红”的零件名; 参考答案:
SELECT JNAME FROM J WHERE WEIGHT>=30 OR COLOR='红'; (16)查询重量不在15-30之间的零件信息; 参考答案:
SELECT * FROM J WHERE WEIGHT<15 OR WEIGHT>30; SELECT * FROM J WHERE WEIGHT NOT BETWEEN 15 AND 30; (17)查询不在天津、也不在北京的供应商信息; 参考答案:
SELECT * FROM S WHERE CITY<>'天津' AND CITY<>'北京'; SELECT * FROM S WHERE CITY NOT IN('天津', '北京');
(18)查询工程名为某厂(即工程名的最后一个字是“厂”)的工程信息; 参考答案:
SELECT * FROM P WHERE PNAME LIKE('*厂');
(19)查询零件代码JNO为“P3”的供应情况,并按照零件数量QTY的降序排列; 参考答案:
SELECT * FROM SPJ WHERE JNO='P3' ORDER BY QTY DESC; (20)查询给代码为“P1”的工程供应了零件的供应商名; 参考答案:
SELECT DISTINCT SNAME FROM S, SPJ WHERE PNO='P1' AND S.SNO=SPJ.SNO; SELECT SNAME FROM S WHERE SNO IN(SELECT SNO FROM SPJ WHERE PNO='P1'); (21)查询供应商的总数; 参考答案:
SELECT COUNT(*) AS 供应商总数 FROM S; (22)查询每个供应商供应零件的数量; 参考答案:
SELECT SNO, SUM(QTY) AS 零件数量 FROM SPJ GROUP BY SNO; (23)查询每个供应商为每个工程供应零件的数量; 参考答案:
SELECT SNO, PNO, SUM(QTY) AS 零件数量 FROM SPJ GROUP BY SNO, PNO; (24)查询给“北京”的工程供应“齿轮”零件的供应商名; 参考答案:
SELECT SNAME FROM S, P, J, SPJ WHERE P.CITY='北京' AND JNAME='齿轮' AND S.SNO=SPJ.SNO AND P.PNO=SPJ.PNO AND J.JNO=SPJ.JNO;
(25)如果供应情况表中某条记录的供应商和工程在同一城市,则显示该记录对应的供应商名和工程名; 参考答案:
SELECT SNAME, PNAME FROM S, P, SPJ WHERE S.CITY=P.CITY AND S.SNO=SPJ.SNO AND P.PNO=SPJ.PNO;
(26)查询每个供应商供应每种零件的数量; 参考答案:
SELECT SNO, JNO,SUM(QTY) AS 零件数量 FROM SPJ GROUP BY SNO, JNO; (27)查询在同一个城市的工程代码(可以以工程代码对的形式给出); 参考答案:
SELECT X.PNO, Y.PNO FROM P X, P Y WHERE X.CITY=Y.CITY AND X.PNO<>Y.PNO; (28)查询供应零件数量在2000以上的供应商代码; 参考答案:
SELECT SNO FROM SPJ GROUP BY SNO HAVING SUM(QTY)>2000; (29)查询与“胜利”在同一个城市的供应商信息; 参考答案:
SELECT X.* FROM S X, S Y WHERE X.CITY=Y.CITY AND Y.SNAME='胜利'; SELECT * FROM S WHERE CITY IN(SELECT CITY FROM S WHERE SNAME='胜利'); (30)将代码“S5”的供应商为代码“P3”的工程提供的零件数量增加100; 参考答案:
UPDATE SPJ SET QTY=QTY+100 WHERE SNO='S5' AND PNO='P3'; (31)删除供应商代码为“S1”、零件代码为“J1”的供应记录; 参考答案:
DELETE FROM SPJ WHERE SNO='S1' AND JNO='J1';
(32)将供应商代码为“S3”的供应记录定义为一个名为“S3供应”的视图; 参考答案:
CREATE VIEW S3供应 AS (SELECT * FROM SPJ WHERE SNO='S3')
(33)将零件表J中所有列的查询和修改权限授予MANAGER用户,并允许该用户将该权限转授其他用户;
参考答案:
GRANT SELECT, UPDATE ON J TO MANAGER WITH GRANT OPTION
(34)将供应商表S中对SNO、SNAME列的查询权限和对SNAME列的修改权限授予EMPLOYEE用户,但不允许该用户将该权限转授其他用户; 参考答案:
GRANT SELECT(SNO,SNAME), UPDATE(SNAME) ON S TO EMPLOYEE
(35)将授予EMPLOYEE用户对供应商表S中SNAME列的修改权限取消。 参考答案:
REVOKE UPDATE(SNAME) ON S
FROM EMPLOYEE
★考核知识点:关系数据库SQL语言(参见P11-31)