实验二:数据操纵
实验学时:4学时
实验类型:综合型
实验要求:必修
一、实验目的
1、掌握SQL数据查询语句;
2、掌握SQL聚集函数的使用;
3、掌握SQL插入、修改、删除语句的使用。
二、实验内容
1.工程项目采购数据库,在实验3.2的基础上插入样例数据并完成下列操作:
(1) 求向工程J1提供零件的供应商的编号。
(2) 求向工程J1提供零件P1的供应商的编号。
(3) 求向工程J1提供红色零件的供应商的编号。
(4) 求没有使用天津供应商提供的红色零件的工程号。
(5) 求至少使用了供应商S1所提供的全部零件的工程号。
(6) 统计各个供应商供应的零件总数。
(7) 求至少使用了3种以上零件的工程号。
(8) 把所有红色零件的颜色改为粉红色。
(9) 将向工程J1提供零件P1的供应商S1改为S2提供。
(10) 删除全部红色零件以及相应的供应-使用记录。
2.产品价格数据库,在实验3.3的基础上插入样例数据并完成下列操作
(1) 列出速度至少是150的那些PC机的型号。
(2) 哪些厂家生产的LAPTOP配置的硬盘不低于1。
(3) 找出由生产厂B所生产的全部产品的型号和价格。
(4) 找出所有的彩色激光打印机的型号。
(5) 找出生产运行速度至少是450MC的PC的厂商。
(6) 找出价格最高的打印机。
(7) 找出每一个生产厂商的PC机的最高价格。
(8) 找出至少生产三种不同型号PC机的厂商。
(9) 厂商A兼并厂商B,把所有B厂商生产的产品改成由厂商A生产。
(10) 删除所有不生产打印机的厂商生产的LAPTOP机。
三、实验原理、方法和手段
在实验3定义的关系模式的基础上,使用SQL数据操作语句完成数据的查询和更新操作。在查询和更新时要注意查询的优化策略。
四、实验组织运行要求
本实验为综合型实验,采用集中授课形式,学生集中上机操作。具体要求如下:
1、学生在进行实验前必须进行充分的预习,熟悉实验内容;
2、教师在学生实验过程中予以必要的辅导,学生独立完成实验。
五、实验条件
1、提供一台具有WINDOWS 98/2000/NT/XP操作系统的计算机;
2、Oracle8.0以上设计环境。
六、实验步骤
类同实验三。
七、思考题
实验比较IN与Exists两种子查询的区别。
八、实验报告
1.实验预习
在实验前每位同学都需要对本次实验进行认真的预习,并写好预习报告,在预习报告中要写出实验目的、要求、简要的实验步骤,形成一个操作提纲。
2.实验记录
学生开始实验时,应该将记录本放在近旁,将实验中所做的每一步操作、所得结果及相关条件如实地记录下来。
3.实验报告
主要内容包括实验中的查询语句、数据更新语句、运行结果以及对操作过程中出现错误的分析总结,回答思考题,给出实验结论。
九、其它说明
学生严格遵守实验室的各项规章制度,配合和服从实验室人员管理。
经过试验 我们也得到了实验的结果
注意这个两个SQL实验脚本是基于实验一中的两个数据库的
代码如下,进过验证 实验没有错误 主要的是双NOT EXISTS 详细的解答见我的博客另一章节
--2.1--------------------------------------------------------------------------------------- select SNO FROM SPJ WHERE JNO='J1'; select SNO FROM SPJ WHERE JNO='J1'AND PNO='P1'; select SPJ.SNO FROM SPJ,P WHERE SPJ.JNO='J1'AND SPJ.PNO=P.PNO AND COLOR='红'; SELECT DISTINCT SPJ.JNO FROM SPJ,S,P WHERE SPJ.SNO=S.SNO AND SPJ.PNO=P.PNO AND S.CITY!='天津' AND P.COLOR!='红'; SELECT DISTINCT JNO FROM J WHERE NOT EXISTS ( SELECT * FROM SPJ SPJ1 WHERE SPJ1.sno='S1' AND NOT EXISTS ( SELECT * FROM SPJ SPJ2 WHERE SPJ2.pno= SPJ1.pno AND SPJ1.jno= J.jno ) ); SELECT SPJ.SNO,COUNT(*) FROM SPJ GROUP BY SPJ.SNO; SELECT SPJ.JNO FROM SPJ GROUP BY SPJ.JNO HAVING COUNT(*) >=3; UPDATE P SET COLOR='粉红' WHERE COLOR='红'; UPDATE SPJ SET SNO='S2' WHERE SNO='S1' AND JNO='J1' AND PNO='P1'; DELETE SPJ WHERE SPJ.PNO IN ( SELECT P.PNO FROM p WHERE P.COLOR='红' ); DELETE P WHERE P.COLOR='红'; --2.2--------------------------------------------------------------------------------- SELECT MODEL FROM PC WHERE SPEED >= 150; SELECT DISTINCT PRODUCT.MAKER FROM PRODUCT,LAPTOP WHERE PRODUCT.MODEL=LAPTOP.MODEL AND LAPTOP.HD >= 1.0; SELECT MAKER,PRODUCT.MODEL,PRICE FROM PRODUCT,PC WHERE PRODUCT.MAKER='B' AND PRODUCT.model=PC.model UNION ( SELECT MAKER,PRODUCT.MODEL,PRICE FROM PRODUCT,LAPTOP WHERE PRODUCT.MAKER='B' AND PRODUCT.model=LAPTOP.model ) UNION (SELECT MAKER,PRODUCT.MODEL,PRICE FROM PRODUCT,PRINTER WHERE PRODUCT.MAKER='B' AND PRODUCT.model=PRINTER.model ); SELECT MODEL FROM PRINTER WHERE COLOR='TRUE'; SELECT DISTINCT PRODUCT.MAKER FROM PRODUCT,PC WHERE TYPE='PC' AND PRODUCT.MODEL=PC.MODEL AND SPEED>450; SELECT * FROM PRINTER WHERE PRICE >= ALL ( SELECT PRICE FROM PRINTER ); SELECT MODEL,PRICE FROM PRINTER WHERE PRICE= ( SELECT MAX(PRICE) FROM PRINTER ); SELECT DISTINCT MAKER,MAX(PRICE) FROM PRODUCT ,PC WHERE PRODUCT.MODEL=PC.MODEL AND TYPE='PC' GROUP BY MAKER; SELECT DISTINCT MAKER,COUNT(*) FROM PRODUCT WHERE TYPE='PC' GROUP BY MAKER HAVING COUNT(*)>=3; UPDATE PRODUCT SET MAKER='B' WHERE MAKER='A'; DELETE PRODUCT P1 WHERE P1.TYPE='LAPTOP' AND EXISTS ( SELECT * FROM PRODUCT P2 WHERE P2.TYPE='Printer' AND P1.MODEL=P2.MODEL ); ROLLBACK;
如有不当之处还请多多指教...
本人劳动成果,还请转载署名出处。。。
原文地址:http://blog.csdn.net/u010416101/article/details/40510213