一、實驗目的
- 本實驗,要求利用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'%520%';
五、運行結果
①更新單條記錄
圖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操作層面,但凡涉及對象表參照來說,往往要比關系型數據庫復雜些許。