日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

山东大学 2020级数据库系统 实验四

發(fā)布時(shí)間:2025/3/15 windows 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 山东大学 2020级数据库系统 实验四 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

What’s more

山東大學(xué) 2020級(jí)數(shù)據(jù)庫(kù)系統(tǒng) 實(shí)驗(yàn)一
山東大學(xué) 2020級(jí)數(shù)據(jù)庫(kù)系統(tǒng) 實(shí)驗(yàn)二
山東大學(xué) 2020級(jí)數(shù)據(jù)庫(kù)系統(tǒng) 實(shí)驗(yàn)三
山東大學(xué) 2020級(jí)數(shù)據(jù)庫(kù)系統(tǒng) 實(shí)驗(yàn)四
山東大學(xué) 2020級(jí)數(shù)據(jù)庫(kù)系統(tǒng) 實(shí)驗(yàn)五
山東大學(xué) 2020級(jí)數(shù)據(jù)庫(kù)系統(tǒng) 實(shí)驗(yàn)六
山東大學(xué) 2020級(jí)數(shù)據(jù)庫(kù)系統(tǒng) 實(shí)驗(yàn)七
山東大學(xué) 2020級(jí)數(shù)據(jù)庫(kù)系統(tǒng) 實(shí)驗(yàn)八、九

寫在前面

做數(shù)據(jù)庫(kù)實(shí)驗(yàn)一定要靜得下心來(lái),才能發(fā)現(xiàn)其中的錯(cuò)誤然后進(jìn)行改正。同時(shí),如果發(fā)現(xiàn) SQL 語(yǔ)句總是報(bào)錯(cuò),“一定是你錯(cuò)了,只是不知道錯(cuò)在哪里!”

其次,SQL 語(yǔ)句中較為復(fù)雜的點(diǎn)博主都進(jìn)行了注釋,希望大家一定要看懂思路后自己寫一遍,而不是盲目的 Ctrl+C,Ctrl+V,切記切記!!

實(shí)驗(yàn)四

實(shí)驗(yàn)四主要考察的內(nèi)容如下:
對(duì)于 alter 語(yǔ)句的掌握程度以及是否能夠使用它來(lái)對(duì)表中的屬性進(jìn)行操作;

對(duì)于 update … set … where 子句的使用;

對(duì)字符串的處理以及刪除字符串中相應(yīng)的字符;

  • 4-1 將 pub 用戶下表 student_41 及數(shù)據(jù)復(fù)制到主用戶的表 test4_01 中,使用 alter table 語(yǔ)句為表增加列: “總成績(jī):sum_score”。
    使用 update 語(yǔ)句,利用 pub.student_course,統(tǒng)計(jì) “總成績(jī)”;

    思路:
  • 先指用 alter table test4_01 add sum_score int 來(lái)添加對(duì)應(yīng)的屬性列。需要注意的是 add 子句后面的屬性列還有跟上該列的類型說(shuō)明;
  • 使用 update … set … 結(jié)構(gòu)計(jì)算每個(gè)學(xué)生的總成績(jī)?nèi)缓筇钊?sum_score 列中即可;
alter table test4_01add sum_score int update test4_01 S set sum_score =(select sum(score)from pub.student_course Twhere S.sid = T.sidgroup by sid)
  • 4-2 將 pub 用戶下表 student_41 及數(shù)據(jù)復(fù)制到主用戶的表 test4_02 中,使用 alter table 語(yǔ)句為表增加列 “平均成績(jī):avg_score” (小數(shù)點(diǎn)后保留 1 位)。
    利用 pub.student_course,統(tǒng)計(jì)“平均成績(jī)”,四舍五入到小數(shù)點(diǎn)后 1 位

    思路:

  • 思路其實(shí)和 4-1 相似,添加對(duì)應(yīng)列,然后分別進(jìn)行平均成績(jī)的計(jì)算即可;
  • 保留小數(shù)點(diǎn)后 1 位使用 round() 函數(shù)即可;
  • 需要注意的是:在對(duì) avg_score 屬性列進(jìn)行定義的時(shí)候,由于保留一位小數(shù),因此需要使用 numeric(3, 1) 來(lái)設(shè)置哦~~

alter table test4_02add avg_score numeric(3, 1) update test4_02 S set avg_score = (select round(avg(score), 1)from pub.student_course Twhere S.sid = T.sidgroup by sid)
  • 4-3 將 pub 用戶下表 student_41 及數(shù)據(jù)復(fù)制到主用戶的表 test4_03 中,使用 alter table 語(yǔ)句為表增加列: “總學(xué)分:sum_credit”。
    使用 update 語(yǔ)句,利用 pub.student_course、pub.course,統(tǒng)計(jì) “總學(xué)分”;
    這時(shí)需要注意:成績(jī)及格才能夠計(jì)算所得學(xué)分,一門課多個(gè)成績(jī)都及格只計(jì)一次學(xué)分。

    思路:
  • 使用 alter … add … 來(lái)添加對(duì)應(yīng)的屬性列,同時(shí)注意列屬性的定義為 int 即可;
  • 注意題目中的提示“一門課多個(gè)成績(jī)都及格只計(jì)一次學(xué)分”,因此我們不能簡(jiǎn)單地使用 score > 60 然后 sum(credit) ;正確的方法應(yīng)該是得到每個(gè)學(xué)生每門課的最高成績(jī),用這個(gè)最高成績(jī)來(lái)判斷是否 > 60,若大于 60 ,則計(jì)一次學(xué)分;由于每個(gè)學(xué)生的最高分是唯一的,因此我們?cè)?sum(credit) 時(shí)相當(dāng)于只計(jì)算了一次,而不是像前者一樣計(jì)算多次。
alter table test4_03add sum_credit int update test4_03 t0 set sum_credit = (select sum(credit)from pub.course natural join (select sid, cid, max(score) max_score -- 得到每個(gè)學(xué)生每門課的最高分from pub.student_coursegroup by sid, cid) t1where t0.sid = sidand t1.max_score >= 60 -- 利用最高分來(lái)進(jìn)行判斷group by sid)
  • 4-4 將 pub 用戶下表 student_41 及數(shù)據(jù)復(fù)制到主用戶的表 test4_04 中。 根據(jù)列院系名稱 dname 到 pub.department 找到對(duì)應(yīng)院系編號(hào) did,將對(duì)應(yīng)的院系編號(hào)回填到院系名稱列 dname 中,如果表中沒有對(duì)應(yīng)的院系名稱,則列 dname 中內(nèi)容不變?nèi)匀皇窃瓉?lái)的內(nèi)容。
    思路:
  • 首先使用 create table … as select * … 來(lái)將 pub.student_41 中的所有數(shù)據(jù) copy 到 test4_04 中;
  • 然后使用 dname 去判斷這個(gè) dname 是否在 pub.department 中;
  • 若是,則將 dname 更新為相應(yīng)的 did;反之則不更新;
create table test4_04 as select * from pub.student_41 update test4_04 t0 set dname =(select didfrom pub.departmentwhere dname = t0.dname) where t0.dname in(select dnamefrom pub.department)
  • 4-5 將 pub 用戶下表 student_41 及數(shù)據(jù)復(fù)制到主用戶的表 test4_05 中,使用 alter table 語(yǔ)句為表增加 4 個(gè)列:“總成績(jī):sum_score”、 “平均成績(jī):avg_score”、“總學(xué)分:sum_credit”、“院系編號(hào):did varchar(2) ”。
    (1) 利用 pub.student_course、pub.course,統(tǒng)計(jì) “總成績(jī)”;
    (2) 利用 pub.student_course、pub.course,統(tǒng)計(jì)“平均成績(jī)”,四舍五入到小數(shù)點(diǎn)后 1 位;
    (3) 利用 pub.student_course、pub.course,統(tǒng)計(jì) “總學(xué)分”;
    (4) 根據(jù)院系名稱到 pub.department 和 pub.department_41 中,找到對(duì)應(yīng)編號(hào),填寫到院系編號(hào)中, 如果都沒有對(duì)應(yīng)的院系,則填寫為 00。
    說(shuō)明:執(zhí)行 update 后,在查詢表中數(shù)據(jù),可能出現(xiàn)順序變化,這是正常,因?yàn)閿?shù)據(jù)在表中是無(wú)序。需要 順序的時(shí)候可以通過(guò) orderby 實(shí)現(xiàn)。

    思路:
  • 首先使用 create 語(yǔ)句進(jìn)行表和數(shù)據(jù)的復(fù)制;
  • 然后使用 alter table 語(yǔ)句在復(fù)制得到的表中添加對(duì)應(yīng)列;注意 alter 似乎不能一起添加,因此需要一列一列地進(jìn)行屬性列地添加;
  • 最后使用 update … set … 子句來(lái)對(duì)表中的屬性列進(jìn)行更新即可(set 可以同時(shí)更新多列哦~~)

需要注意的是:對(duì)于院系編號(hào)地更新時(shí),現(xiàn)在是從兩個(gè)表中尋找對(duì)應(yīng)的院系編號(hào)而不是一個(gè)表了(當(dāng)時(shí)卡了好久/(ㄒoㄒ)/~~),這兩個(gè)表可以通過(guò) union 來(lái)連接。(由于是前面問(wèn)題的綜合,因此代碼較長(zhǎng))

create table test4_05 as select * from pub.student_41 alter test4_05add sum_score int -----------------分開哦----------------------- alter test4_05add avg_score numeric(3, 1) -----------------分開哦----------------------- alter test4_05add sum_credit int -----------------分開哦----------------------- alter test4_05add did varchar(2) update test4_05 t0 set sum_score = (select sum(score)from pub.student_course t1where t0.sid = t1.sidgroup by sid), avg_score =(select round(avg(score), 1)from pub.student_course t2where t0.sid = t2.sidgroup by sid), sum_credit = (select sum(credit)from pub.course natural join (select sid, cid, max(score) max_scorefrom pub.student_coursegroup by sid, cid) t1where t0.sid = sidand t1.max_score >= 60group by sid), did = casewhen dname in( (select dnamefrom pub.department)union(select dnamefrom pub.department_41) )then(select didfrom ( (select dname, didfrom pub.department)union(select dname, didfrom pub.department_41) )where dname = t0.dname) else '00' end
  • 4-6 將 pub 用戶下的 Student_42 及數(shù)據(jù)復(fù)制到主用戶的表 test4_06 中,對(duì)表中的數(shù)據(jù)進(jìn)行整理,修復(fù)那些不規(guī)范的數(shù)據(jù): 剔除姓名列中的所有空格;
    思路:
  • 使用 create 來(lái)將表和數(shù)據(jù)進(jìn)行復(fù)制;

  • 為了刪除空格,我們可以使用函數(shù) replace(string, target_str, replace_str) 來(lái)進(jìn)行;

    第一個(gè)參數(shù) string 表示需要修改的字符串;第二個(gè)參數(shù) target_str 表示在該字符串中需要修改的字符(為了查找到該字符);第三個(gè)參數(shù) replace_str 表示需要將 target_str 替換為什么字符;

    在本題中,我們可以這樣使用 replace 函數(shù):replace(name, ’ ', ‘’),找到空格并將它刪去;(translate()函數(shù)也有類似的功能!)

create table test4_06 as select * from pub.student_42 update test4_06 set name = replace(name, ' ', '')
  • 4-7 將 pub 用戶下的 Student_42 及數(shù)據(jù)復(fù)制到主用戶的表 test4_07 中,對(duì)表中的數(shù)據(jù)進(jìn)行整理,修復(fù)那些不規(guī)范的數(shù)據(jù): 對(duì)性別列進(jìn)行規(guī)范(需要先確定哪些性別數(shù)據(jù)不規(guī)范,也就是那些和大多數(shù)不一樣的就是不規(guī)范的);
    思路:
  • 使用 create 子句來(lái)對(duì)表和表中的數(shù)據(jù)進(jìn)行復(fù)制;
  • 為了看到哪些才是不規(guī)范的數(shù)據(jù),我們可以首先使用:
    select distinct sex, count(sex) from test4_07 group by sex
    來(lái)查看所謂的“不規(guī)范數(shù)據(jù)”。發(fā)現(xiàn):不規(guī)范的數(shù)據(jù)是加上了“性”字的 sex 值,同時(shí)有些 sex 值的前后可能還有空格等;
  • 具體的刪除方法我們還是可以使用 replace() 函數(shù);
create table test4_07 as select * from pub.student_42 update test4_07 set sex = casewhen sex like '%男%' then '男' -- %表示省略一個(gè)或多個(gè)字符when sex like '%女%' then '女'else sex End
  • 4-8 將 pub 用戶下的 Student_42 及數(shù)據(jù)復(fù)制到主用戶的表 test4_08 中,對(duì)表中的數(shù)據(jù)進(jìn)行整理,修復(fù)那些不規(guī)范的數(shù)據(jù): 對(duì)班級(jí)列進(jìn)行規(guī)范(需要先確定哪些班級(jí)不規(guī)范)。
    思路:
  • 首先使用 create 來(lái)對(duì)表以及表中的數(shù)據(jù)進(jìn)行復(fù)制;
  • 然后使用
    select distinct class, count(class) from test4_08 group by class
    來(lái)看看哪些班級(jí)數(shù)據(jù)是不規(guī)范的數(shù)據(jù)。發(fā)現(xiàn),不規(guī)范的班級(jí)數(shù)據(jù)后面又“級(jí)”字,我們只需要使用 replace() 函數(shù)來(lái)將它去掉即可;
create table test4_08 as select * from pub.student_42 update test4_08 set class = replace(class, '級(jí)', '')
  • 4-9 將 pub 用戶下的 Student_42 及數(shù)據(jù)復(fù)制到主用戶的表 test4_09 中,對(duì)表中的數(shù)據(jù)進(jìn)行整理,修復(fù)那些不規(guī)范的數(shù)據(jù): 年齡為空值的根據(jù)出生日期設(shè)置學(xué)生年齡(截止到 2012 年的年齡,即年齡=2012-出生年份),年齡不 為空值的不要改變。
    思路:
  • 首先使用 create 來(lái)對(duì)表以及表中的數(shù)據(jù)進(jìn)行復(fù)制;
  • 然后使用 update 和 where 判定語(yǔ)句來(lái)對(duì) age 列進(jìn)行更新即可;
  • 期間還是用到了實(shí)驗(yàn)三中提到的 extract() 函數(shù)哦~~
create table test4_09 as select * from pub.student_42 update test4_09 set age = 2012 - extract(year from birthday) where age is null
  • 4-10 將 pub 用戶下的 Student_42 及數(shù)據(jù)復(fù)制到主用戶的表 test4_10 中,對(duì)表中的數(shù)據(jù)進(jìn)行整理,修復(fù)那些不規(guī)范的數(shù)據(jù):
    (1) 剔除姓名列中的所有空格;
    (2) 剔除院系名稱列中的所有空格;
    (3) 對(duì)性別列進(jìn)行規(guī)范(需要先確定哪些性別數(shù)據(jù)不規(guī)范,也就是那些和大多數(shù)不一樣的就是不規(guī)范的);
    (4) 對(duì)班級(jí)列進(jìn)行規(guī)范(需要先確定哪些班級(jí)不規(guī)范)。
    (5) 年齡為空值的根據(jù)出生日期設(shè)置學(xué)生年齡(截止到 2012 年的年齡,即年齡=2012-出生年份), 年齡不為空值的不要改變。

    思路:
  • 就是對(duì)前面所有的問(wèn)題的綜合,由于 set 中可以同時(shí)設(shè)置多個(gè)列,因此將它們連接起來(lái)即可;
create table test4_10 as select * from pub.student_42 update test4_10 set name = replace(name, ' ', ''), dname = replace(dname, ' ', ''), sex = casewhen sex like '%男%' then '男'when sex like '%女%' then '女'else sex end, class = replace(class, '級(jí)%', ''), age = case when age is null then 2012 - extract(year from birthday)else age end

再次強(qiáng)調(diào):一定是看懂思路之后自己實(shí)踐哈~~
有問(wèn)題還請(qǐng)斧正!

總結(jié)

以上是生活随笔為你收集整理的山东大学 2020级数据库系统 实验四的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 蜜桃视频黄色 | 亚洲专区欧美专区 | 91精品婷婷国产综合久久竹菊 | 少妇av片| 领导揉我胸亲奶揉下面 | 超碰按摩| 日本www在线播放 | 蜜桃成人无码区免费视频网站 | 亚洲一区在线视频 | 男女午夜视频在线观看 | 午夜精品久久99蜜桃的功能介绍 | 新91视频在线观看 | 林天顾悦瑶笔趣阁 | aaa黄色| 囯产精品一品二区三区 | 欧美一区二区三区观看 | www.国产一区二区 | ww黄色 | 亚洲理论片在线观看 | 国产av无码专区亚洲a∨毛片 | 亚洲精品久久久狠狠狠爱 | 亚洲精品一区二区三区在线 | 加勒比精品在线 | 日韩一级片免费在线观看 | 羞羞的网站在线观看 | 日韩欧美视频在线 | 欧美日韩生活片 | 黄网站欧美内射 | 色一情一交一乱一区二区三区 | 久久久久国色av免费观看性色 | 久久99一区二区 | 日韩精品无码一区二区三区 | 艳情五月 | 午夜影院在线播放 | 国产精品天美传媒 | 丁香花高清在线观看完整动漫 | jjzz日本女人| 欧美成人精品一区二区男人小说 | 毛片一区二区 | 国产成人精品一区二区三区网站观看 | 91夜色视频 | 18精品爽国产白嫩精品 | missav | 免费高清av在线看 | 五月导航 | 国产欧美视频在线播放 | 欧美激情一区二区在线 | 免费看成人aa片无码视频羞羞网 | 制服丝袜一区在线 | 亚洲欧美日韩国产成人精品影院 | 天天操天天插天天射 | 久久99亚洲精品 | av五十路| 女女同性高清片免费看 | 白浆av| 免费无遮挡无码永久视频 | 闺蜜张开腿让我爽了一夜 | 欧美色图亚洲自拍 | 日本韩国三级 | 91视频看看 | av影视网| 欧美一区二区三区免费在线观看 | 欧美性受xxx黑人xyx性爽 | 欧洲视频一区二区 | 亚洲最大在线视频 | 黄网站色视频免费观看 | 熟女毛片 | 精品成人一区二区三区久久精品 | 亚洲精品国产精品乱码不66 | 麻豆传媒一区二区三区 | 久久久最新 | 你懂的av在线| 神马久久久久久 | 亚洲美女色 | av高清免费| 久久国产精品久久国产精品 | 国产欧美日韩视频在线观看 | 非洲黑妞xxxxhd精品 | 久久久久久久黄色 | 亚洲欧美日韩另类 | 99色网| 国精产品一品二品国精品69xx | 国产精品7777777 | 国产精品99久久久久久动医院 | 国产精品一区二区三区免费观看 | 欧美一区二区三区激情视频 | 影音先锋男人的天堂 | 又黄又爽一区二区三区 | 少妇天天干 | 国产二级毛片 | 精品中文字幕一区二区 | 亚洲精品白浆高清久久久久久 | 在线亚洲+欧美+日本专区 | 欧美专区 日韩专区 | 日本高清视频免费观看 | 麻豆影视国产在线观看 | 四虎网址大全 | 日本精品视频一区 | 男人天堂资源网 | 午夜精品美女久久久久av福利 |