数据库系统概论第三章作业题

大三上:数据库系统概论所有实验报告和课后作业

文章目录

  • 4.针对,上题中建立的四个表试用SQL语言完成第二章习题5中的查询。
  • 5.针对习题3中的四个表试用SQL语言完成以下各项操作:
  • 11.请为三建工程项目建立一个供应情况的视图,包括供应商代码(SNO)、零件代码( PNO)、

4.针对,上题中建立的四个表试用SQL语言完成第二章习题5中的查询。

(1)求供应工程J1零件的供应商号码SNO;
(2)求供应工程J1零件P1的供应商号码SNO;
(3)求供应工程J1零件为红色的供应商号码SNO;
(4)求没有使用天津供应商生产的红色零件的工程号JNO;
(5)求至少用了供应商S1所供应的全部零件的工程号JNO(类似于P111[例47])。

--(1)
SELECT SNO FROM SPJ WHERE JNO= 'J1';

--(2)
SELECT SNO FROM SPJ WHERE JNO= 'J1' AND PNO= 'P1';

--(3)
SELECT SNO
/*这是嵌套查询*/
FROM SPJ WHERE JNO= ‘J1 ’ AND PNO IN
/*找出红色零件的零件号码PNO */
(SELECT PNO FROM P
/*从P表中找*/
WHERE COLOR= '红');
--或
SELECT SNO FROM SPJ,P
/*这是两表连接查询*/
WHERE JNO='J1'
/*这是复合条件连接查询*/
AND SPJ.PNO=P.PNO AND COLOR='红';

--(4)
SELECT JNO
/*这种解法是使用多重嵌套查询*/
FROM J
/*注意:从J表入手,以包含那些*/ 
WHERE NOT EXISTS
/*尚未使用任何零件的工程号*/
(SELECT * FROM SPJ WHERE SPJ.JNO=J.JNO AND SNO in ( SELECT SNO
/*天津供应商的SNO*/
FROM S WHERE CITY= "天津")
AND PNO IN
/*红 色零件的PNO*/
(SELECT PNO FROM P WHERE COLOR= '红'));
--或
SELECT JNO WHERE NOT EXISTS (SELECT * FROM SPJ,S,P
/*这里的子查询是一个多表连接*/
WHERE SPJ .JNO=J.JNO AND SPJ.SNO=S.SNO AND SPJ.PNO=P.PNO AND S.CITY='天津' AND P.COLOR='红');

--(5)
SELECT DISTINCT JNO FROM SPJ SPJZ WHERE NOT EXISTS
/*这是一个相关子查询*/
(SELECT *
/*父查询和子查询均引用了SPJ表*/
FROM SPJ SPJX
/*用别名SPJZ、SPJX 将父查询*/
WHERE SNO='S1'
/*与子查询中的SPJ表区分开*/
AND NOT EXISTS
(SELECT *
/*用别名SPJY欤查询*/
FROM SPJSPJY /*中的 SPJ表区分开*/
WHERE SPJY.PNO=SPJX.PNO AND SPJYJNO=SPJZ.JNO));

5.针对习题3中的四个表试用SQL语言完成以下各项操作:

(1)找出所有供应商的姓名和所在城市。
(2)找出所有零件的名称、颜色、重量。
(3)找出使用供应商S1所供应零件的工程号码。
(4)找出工程项目J2使用的各种零件的名称及其数量。
(5)找出上海厂商供应的所有零件号码。
(6)找出使用上海产的零件的工程名称。
(7)找出没有使用天津产的零件的工程号码。.
(8)把全部红色零件的颜色改成蓝色。
(9)由S5供给J4的零件P6改为由S3供应,请作必要的修改。
(10)从供应商关系中删除S2的记录,并从供应情况关系中删除相应的记录。
(11)请将(S2, J6,P4,200) 插入供应情况关系。

--(1)
SELECT SNAME, CITY FROM S;

--(2)
SELECT PNAME, COLOR, WEIGHT FROM P;

--(3)
SELECT JNO FROM SPJ WHERE SNO= 'S1';

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

--(5)
SELECT DISTINCT PNO FROM SPJ WHERE SNO IN (SELECT SNO FROM S WHERE CITY='上海');
--SELECT DISTINCT 表示查询结果中,去掉了重复的行

--(6)
SELECT JNAME FROM J,SPJ,S WHERE J.JNO=SPJ.JNO AND SPJ.SNO=S.SNO AND S.CITY='上海';
--或
SELECT JNAME FROM J WHERE JNO IN (SELECT JNO FROM SPJ,S WHERE SPJ.SNO=S.SNO AND S.CITY='上海');

--(7)
SELECT JNO FROM WHERE NOT EXISTS(SELECT * FROM SPJ WHERE SPJ.JNO=J.JNO AND SNO IN(SELECT SNO FROM WHERE CITY='天津'));SELECT JNO FROM WHERE NOT EXISTS(SELECT FROM SPJ,S WHERE SPJ.JNO=J.JNO AND SPJ.SNO=S.SNO AND S.CITY='天津');

--(8)
UPDATE P SET COLOR='蓝' WHERE COLOR='红';

--(9)
UPDATE SPJ SET SNO='S3' WHERE SNO='S5' AND JNO='J4' AND PNO='P6';

--(10)
DELETE FROM SPJ WHERE SNO='S2' DELETE FROM S WHERE SNO='S2';

--(11)
INSERT INTO SPJ(SNO, JNO, PNO, QTY) /*INTO 子句中指明列名*/ .
VALUES(S2, J6, P4, 200);
/*插入的属性值与指明列要对应*/
--或
INSERT INTO SPJ
/*INTO子句中没有指明列名*/
VALUES (S2, P4,J6, 200);
/*插入的记录在每个属性列上有值*/
/*并且属性列要和表定义中的次序-致*/

11.请为三建工程项目建立一个供应情况的视图,包括供应商代码(SNO)、零件代码( PNO)、

供应数量(QTY)。针对该视图完成下列查询:
(1) 找出三建工程项目使用的各种零件代码及其数量。
(2)找出供应商S1供应三建工程的情况。

--创建视图:
CREATE VIEW V_ SPJ AS SELECT SNO, PNO, QTY FROM SPJ
WHERE JNO=(SELECT JNO FROM J WHERE JNAME='三建');
--对该视图查询:
--(1)找出三建工程项目使用的各种零件代码及其数量。
SELECT PNO,QTY FROM V_SPJ;
--(2)找出供应商S1的供应情况。
SELECT PNO,QTY/* S1供应三建工程的零件号和对应的数量*/
FROM V_SPJ WHERE SNO='S1';

你可能感兴趣的:(sql)