一、实验目的
- 本实验,要求利用SQL代码实现并掌握记录的OML操作,重点在于面向对象OML句型的进一步学习和深层次的掌握;
- 在理解实验难点的基础上,即:面向对象的表查询,记录的更新操作,再深入拓展并巩固SQL代码句型语法的使用规则。在进行复合条件查询和模糊查询的同时,要理解关系型数据库与面向对象数据库的相同之处以及区别,特别是涉及对象字段参照的用法。
二、实验内容
实验背景导入:
公司已经完成数据表的完整性与数据库对象安全性的设置,接下来就要进行相关测试,但对于测试前需要为系统填充一些初始化的数据记录,所以就要进行记录DML操作。
① 更新单条记录。将“劲霸西服”由“推荐”商品转为“热点”商品,需要完成对该商品状态的更改。
② 更新多条记录。现将所有商品的折扣调整为0.8,为并将所有的进货日 期调整2010年10月1日。
③ 删除单条记录。商品号为040002的商品已售完,并且以后也不考虑再进货,需要在商品信息表中清除该商品的信息。
④ 删除所有记录。删除用户表中的所有信息。
⑤ 使用复合条件查询。需要了解商品类别为01,并且商品单价在2500元以上,的商品信息,要求以汉字标题显示商品号,商品名称,商品类别和价格。
⑥ 模糊查询。知道一个商品的商品名称中包含有“520”字样,要求查询该 商品的商品号、商品名称、商品单价和商品折扣。
三、实验平台
软件:WORD、Oracle
四、实验步骤
①更新单条记录。将“劲霸西服”由“推荐”商品转为“热点”商品,更改状态。
Insert into RD_COMMODITY_TYPES (COMMODITY_TYPE_ID,STATUS,COMMODITY_TYPE) values (‘0003‘,‘推荐‘,‘服装‘); Insert into C##RD.RD_GOODS (GOOD_ID,DISCOUNT,GOODS,UNIT_PRICE,PURCHASE_DATE,GOOD_TYPE) values (‘0003‘,‘0.85‘,‘劲霸西服‘,165,‘2017-32-23‘, (select ref(a) from RD_COMMODITY_TYPES a where COMMODITY_TYPE_ID=‘0003‘));select GOOD_ID,GOODS,deref(GOOD_TYPE),(select STATUS from RD_COMMODITY_TYPES where RD_COMMODITY_TYPES.COMMODITY_TYPE_ID=‘0003‘) from RD_GOODS where GOOD_TYPE=(select ref(a) from RD_COMMODITY_TYPES a where COMMODITY_TYPE_ID=‘0003‘); select GOOD_ID,GOODS,deref(GOOD_TYPE),(select STATUS from RD_COMMODITY_TYPES where RD_COMMODITY_TYPES.COMMODITY_TYPE_ID=‘0003‘) from RD_GOODS where GOOD_TYPE=(select ref(a) from RD_COMMODITY_TYPES a where COMMODITY_TYPE_ID=‘0003‘); update RD_COMMODITY_TYPES set STATUS=‘热点‘ where COMMODITY_TYPE_ID=‘0003‘; select GOOD_ID,GOODS,deref(GOOD_TYPE),(select STATUS from RD_COMMODITY_TYPES where RD_COMMODITY_TYPES.COMMODITY_TYPE_ID=‘0003‘) from RD_GOODS where GOOD_TYPE=(select ref(a) from RD_COMMODITY_TYPES a where COMMODITY_TYPE_ID=‘0003‘);
②更新多条记录。将所有商品的折扣调整为0.8,将所有的进货日期调整2010年10月1日
select * from RD_GOODS; update RD_GOODS set DISCOUNT=‘0.80‘,PURCHASE_DATE=‘2010-10-01‘; select * from RD_GOODS;
③删除单条记录。商品号为040002的商品已售完,在商品表中清除该商品的信息。
update RD_GOODS set GOOD_ID=‘040002‘ where GOODS=‘劲霸西服‘; select * from RD_GOODS; delete from RD_GOODS where GOOD_ID=‘040002‘; select * from RD_GOODS;
④删除所有记录。删除用户表中的所有信息。
select * from RD_MEMBERS; delete from RD_MEMBERS; select * from RD_MEMBERS;
⑤使用复合条件查询。需要了解商品类别为01,并且商品单价在2500元以上,的商品信息,要求以汉字标题显示商品号,商品名称,商品类别和价格。
update RD_COMMODITY_TYPES set COMMODITY_TYPE=‘02‘; Insert into RD_COMMODITY_TYPES (COMMODITY_TYPE_ID,STATUS,COMMODITY_TYPE) values (‘0004‘,‘推荐‘,‘01‘); Insert into C##RD.RD_GOODS (GOOD_ID,DISCOUNT,GOODS,UNIT_PRICE,PURCHASE_DATE,GOOD_TYPE) values (‘0004‘,‘0.8‘,‘直升飞机‘,165000,‘2017-32-23‘, (select ref(a) from RD_COMMODITY_TYPES a where COMMODITY_TYPE_ID=‘0004‘)); Insert into C##RD.RD_GOODS (GOOD_ID,DISCOUNT,GOODS,UNIT_PRICE,PURCHASE_DATE,GOOD_TYPE) values (‘0005‘,‘0.95‘,‘520钢铁胶水‘,165,‘2017-32-23‘, (select ref(a) from RD_COMMODITY_TYPES a where COMMODITY_TYPE_ID=‘0004‘)); Insert into C##RD.RD_GOODS (GOOD_ID,DISCOUNT,GOODS,UNIT_PRICE,PURCHASE_DATE,GOOD_TYPE) values (‘0006‘,‘0.45‘,‘华人牌手机‘,23450,‘2017-32-23‘, (select ref(a) from RD_COMMODITY_TYPES a where COMMODITY_TYPE_ID=‘0004‘)); select * from RD_GOODS; select GOOD_ID "商品号", GOODS "商品名称",(select COMMODITY_TYPE from RD_COMMODITY_TYPES where RD_COMMODITY_TYPES.COMMODITY_TYPE=‘01‘) "商品类别", UNIT_PRICE "价格" from RD_GOODS where (select COMMODITY_TYPE from RD_COMMODITY_TYPES where RD_COMMODITY_TYPES.COMMODITY_TYPE=‘01‘)=‘01‘ and UNIT_PRICE > 2500;
⑥模糊查询。知道一个商品的商品名称中包含有“520”字样,要求查询该商品的商品号、商品名称、商品单价和商品折扣。
select * from RD_GOODS; select GOOD_ID,GOODS,UNIT_PRICE,DISCOUNT from RD_GOODS where GOODS like‘R0%‘;
五、运行结果
①更新单条记录
图5-1 单条数据更新前
图5-2 单条数据更新后
②更新多条记录
图5-3 多条数据更新前
图5-4 多条数据更新后
③删除单条记录
图5-5 单条记录删除前
图5-6 单条记录删除后
④删除所有记录
图5-7 所有记录删除前
图5-8 所有记录删除后
⑤使用复合条件查询
图5-9 复合条件查询前
图5-10 复合条件查询后
⑦ 模糊查询
图5-11 模糊查询前
图5-12 模糊查询后
六、实验总结
通过实验,相关总结和经验收获,可分点总结如下:
- 在本实验使用复合条件查询的时候,根据以往SqlServer的经验,用[]把中文列名包围住或者采用“as ‘ 别名’”的方式,执行语句仍然报错,而经过在网上找了一些资料,才发现,Oracle的中文列别名要用 "" 双引符号括起来;
- 模糊查询操作,简单的方式就是字符匹配操作可以使用通配符 “%” 和 “_”,其中,%:表示任意个字符,包括零个;
i. _:表示一个任意字符。再次复习了SqlServer的相关知识点;
- 对于本实验中的部分操作需求,由于没有绝佳的跨实验准备或最吻合的匹配度,所以在进行操作时,都必须事先进行数据准备,这也就是为什么本实验的实验步骤中,明明题目需求可以使用一条SQL来完成,从而列举了多条的原因;
- 本实验在操作和实验结果记录的过程中,都采用了对比的方法,以实验前和经过需求处理后进行对比,突出表现操作需求的实验效果;
- 经过本实验,利用SQL代码实现并初步掌握了记录的OML操作,对于面向对象OML句型的进一步学习和深层次掌握的实验重点,也有了一定的认识;
- 面向对象数据库没有关系型数据库的主、外键,从理论体系上来说,逻辑层面较为简化。但是经过本实验似乎才发现,在SQL操作层面,但凡涉及对象表参照来说,往往要比关系型数据库复杂些许。