山東大學資料庫系統實驗三

2021-09-18 06:25:03 字數 3893 閱讀 3442

宣告:所有sql語句均在實驗平台驗證通過,實驗細節可能隨時間推移老師會進行修改。在此僅提供解答思路,畢竟我的方法肯定不是最優,而且實驗平台有查重功能,不要一昧的複製哦!

1.刪除表中的學號不全是數字的那些錯誤資料,學號應該是數字組成,不能夠包含字母空格等非數字字元。

create table test3_01 as select * from pub.student_31 where regexp_like(sid,'^(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)');
2.刪除表中的出生日期和年齡(截止到2023年的年齡,即年齡=2012-出生年份)不一致的那些錯誤資料。

create table test3_02 as select * from pub.student_31 where age = 2012 - extract(year from birthday);
3.刪除表中的性別有錯誤的那些錯誤資料(性別只能夠是「男」、「女」或者空值)。

create table test3_03 as select * from pub.student_31 where *** ='男' or *** = '女' or *** is null;
4.刪除表中的院系名稱有空格的、院系名稱為空值的或者院系名稱小於3個字的那些錯誤資料。

create table test3_04 as

select * from pub.student_31 minus

select * from pub.student_31 where dname like '% %' or dname is null or length(dname) < 3;

5.刪除表中的班級不規範的那些錯誤資料,不規範是指和大多數不一致。這個題重點是鍛鍊利用所學知識解決實際問題的能力。

create table test3_05 as

select * from pub.student_31 where class not like '% %' and class not like '%級%';

6.刪除表中的錯誤資料,不規範的資料也被認為是那些錯誤資料。

學號不全是數字;

出生日期和年齡不一致的(年齡=2012-出生年份);

姓名有空格的或者長度小於2個字的;函式length()返回字串長度。

性別有錯誤的(只能夠是「男」、「女」、空值);

院系名稱有空格的、院系名稱為空值的;

院系名稱小於3個字的;

班級資料有錯誤的(需要先找到班級裡面的錯誤)。

保留最後全部正確的資料。

create table test3_06 as

select * from

(select * from

(    select * from

(        select * from

(select * from

(select * from pub.student_31 minus

select * from pub.student_31 where dname like '% %' or dname is null or length(dname) < 3

)where regexp_like(sid,'^(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)')

) where length(name) >= 2 and name not like '% %'

) where *** ='男' or *** = '女' or *** is null

) where age = 2012 - extract(year from birthday)

)where class not like '% %' and class not like '%級%';

7.刪除其中的錯誤資料,錯誤指如下情況:

學號在學生資訊pub.student中不存在的;

create table test3_07 as select a.* from pub.student_course_32 a,pub.student b where a.sid = b.sid;
8.刪除其中的錯誤資料,錯誤指如下情況:

課程號和教師編號在教師授課表pub.teacher_course中不同時存在的,即沒有該教師教該課程;

create table test3_08 as select a.* from pub.student_course_32 a,pub.teacher_course b where a.cid = b.cid and a.tid = b.tid;
9.刪除其中的錯誤資料,錯誤指如下情況:

成績資料有錯誤(需要先找到成績裡面的錯誤)。

create table test3_09 as select * from pub.student_course_32 where score >= 0 and score <= 100;
10.刪除其中的錯誤資料,錯誤指如下情況:

學號在學生資訊pub.student中不存在的;

課程號在課程資訊pub.course中不存在的;

教師編號在教師資訊pub.teacher中不存在的;

課程號和教師編號在教師授課表pub.teacher_course中不存在的;

成績資料有錯誤(需要先找到成績裡面的錯誤)。

保留最後正確的資料。

create table test3_10 as select a.* from

pub.student_course_32 a,

pub.student b,

pub.course c,

pub.teacher d,

pub.teacher_course e

where a.sid = b.sid and a.cid = c.cid and a.tid = d.tid and a.cid = e.cid and a.tid = e.tid and score >= 0 and score <= 100;

1.使用regexp_like()函式,可以使用正規表示式進行判斷。

2.函式substr(sid,1,1)返回學號的第一位,判斷是否是數字。

3.函式extract(year from birthday)返回birthday的年份。

4.實驗三是刪除錯誤的資料,可以轉化為選擇正確的資料,這樣就與實驗二類似,語法無大問題。主要的是根據錯誤資料的情況通過where語句的like、正規表示式等篩選出來。

推送自己的一些學習筆記,實驗源**等,

山東大學資料庫系統實驗九

宣告 所有sql語句均在實驗平台驗證通過,實驗細節可能隨時間推移老師會進行修改。在此僅提供解答思路,畢竟我的方法肯定不是最優,而且實驗平台有查重功能,不要一昧的複製哦!建立表test9 01,表的結構同pub.student 11 1一樣。為test9 01的sid建立唯一不重複索引。將pub使用者...

山東大學《資料庫系統》實驗八

提交 commit 和回滾 rollback 實體授權 對比有無索引情況下資料檢索速度,學會如何能夠使用索引,掌握如何查詢是否使用索引了。啟動兩個不同瀏覽器,主賬號 userid 在 firefox 中登入 備用賬號 userbid 在另外乙個瀏覽器登入,或者主賬號在主平台登入,備用賬號在備平台登入...

山東大學2023年資料庫系統習題

一.簡答題 24分 1.簡述資料庫系統 模式結構是什麼,有什麼優點。2.給了乙個元組關係演算的表示式,讓畫表示式樹,然後在畫優化後的表示式樹。sname,cname,score f s sc c 3.關係模式和關係例項的區別。4.事務是什麼,它的特性是什麼。5.判斷是否是多值依賴,然後說明原因。6....