面向对象数据库设计与应用 04 - 数据表操作与查询

时间:2021-09-12 03:25:14

一、实验目的

  1. 本实验,要求利用SQL代码实现并掌握记录的OML操作,重点在于面向对象OML句型的进一步学习和深层次的掌握;
  2. 在理解实验难点的基础上,即:面向对象的表查询,记录的更新操作,再深入拓展并巩固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 likeR0%;

 


  

 

 

五、运行结果

①更新单条记录

 面向对象数据库设计与应用 04 - 数据表操作与查询

图5-1 单条数据更新前

 

 面向对象数据库设计与应用 04 - 数据表操作与查询

图5-2 单条数据更新后

 

 

②更新多条记录

 面向对象数据库设计与应用 04 - 数据表操作与查询

图5-3 多条数据更新前

 

 面向对象数据库设计与应用 04 - 数据表操作与查询

图5-4 多条数据更新后

 

 

 

 

 

③删除单条记录

 面向对象数据库设计与应用 04 - 数据表操作与查询

图5-5 单条记录删除前

 

 面向对象数据库设计与应用 04 - 数据表操作与查询

图5-6 单条记录删除后

 

 

 

 

 

④删除所有记录

 面向对象数据库设计与应用 04 - 数据表操作与查询

图5-7 所有记录删除前

 

 面向对象数据库设计与应用 04 - 数据表操作与查询

图5-8 所有记录删除后

 

 

 

 

 

⑤使用复合条件查询

 面向对象数据库设计与应用 04 - 数据表操作与查询

图5-9 复合条件查询前

 

 面向对象数据库设计与应用 04 - 数据表操作与查询

图5-10 复合条件查询后

 

 

 

 

 

⑦    模糊查询

 面向对象数据库设计与应用 04 - 数据表操作与查询

图5-11 模糊查询前

 

 面向对象数据库设计与应用 04 - 数据表操作与查询

图5-12 模糊查询后

 

 

 

 

 

六、实验总结

通过实验,相关总结和经验收获,可分点总结如下:

  1. 在本实验使用复合条件查询的时候,根据以往SqlServer的经验,用[]把中文列名包围住或者采用“as ‘ 别名’”的方式,执行语句仍然报错,而经过在网上找了一些资料,才发现,Oracle的中文列别名要用 "" 双引符号括起来;
  2. 模糊查询操作,简单的方式就是字符匹配操作可以使用通配符 “%” 和 “_”,其中,%:表示任意个字符,包括零个;  

          i.      _:表示一个任意字符。再次复习了SqlServer的相关知识点;

  1. 对于本实验中的部分操作需求,由于没有绝佳的跨实验准备或最吻合的匹配度,所以在进行操作时,都必须事先进行数据准备,这也就是为什么本实验的实验步骤中,明明题目需求可以使用一条SQL来完成,从而列举了多条的原因;
  2. 本实验在操作和实验结果记录的过程中,都采用了对比的方法,以实验前和经过需求处理后进行对比,突出表现操作需求的实验效果;
  3. 经过本实验,利用SQL代码实现并初步掌握了记录的OML操作,对于面向对象OML句型的进一步学习和深层次掌握的实验重点,也有了一定的认识;
  4. 面向对象数据库没有关系型数据库的主、外键,从理论体系上来说,逻辑层面较为简化。但是经过本实验似乎才发现,在SQL操作层面,但凡涉及对象表参照来说,往往要比关系型数据库复杂些许。