# 山东大学数据库实验4（2021最新版）

## 山东大学数据库实验4（2021最新版）

数据库实验四
1
create table test4_01 as
select *
from pub.student_41;

alter table test4_01 add sum_score int ;

update test4_01
set sum_score =(
select sum(score)
from pub.student_course
where test4_01.sid=pub.student_course.sid
group by pub.student_course.sid);
2
create table test4_02 as
select *
from pub.student_41;
alter table test4_02 add avg_score numeric( 4,1);
update test4_02
set avg_score=(
select avg(score)
from pub.student_course
where test4_02.sid=pub.student_course.sid
group by sid);

3
create table test4_03 as
select *
from pub.student_41;
alter table test4_03 add sum_credit numeric(5,1) ;

update test4_03
set sum_credit=(
select sum(credit)
from (
select cid ,sid,max(score) score_
from pub.student_course    //防止有人一门课考好几次，每次成绩都大于60，那就会计算好几次的学分，去最大的成绩的话，就说明，只要及格了就只会记录一次
group by sid,cid )
natural join pub.course
where test4_03.sid =sid and score_>=60
group by sid
);
//update test4_03
set sum_credit=(
select sum(credit)
from (
select cid ,sid,max(score) score_
from pub.student_course    //防止有人一门课考好几次，每次成绩都大于60，那就会计算好几次的学分，去最大的成绩的话，就说明，只要及格了就只会记录一次
group by sid,cid
Having max(score)>=60 )
natural join pub.course
where test4_03.sid =sid
);

create table test4_04 as
select *
from pub.student_41;
update test4_04
set dname=(
select did
from pub.department
where test4_04.dname=dname)
//第一个where确保，只有test4_04.dname=dname时，才会更改did，而当没有符合test4_04.dname=dname时，select就会返回空值null，dname就会被置为null，这与题目不符合，题目要求，当没有test4_04.dname=dname时，不对did做改动
where test4_04.dname in(
select dname
from  pub.department);
//这个where保证，当test4_04.dname在department表中时，才对did改动，限制了set 的作用条件

5

create table test4_05 as
select *
from pub.student_41;

alter table test4_05 add sum_score int ;
alter table test4_05 add avg_score numeric( 4,1);
alter table test4_05 add sum_credit numeric(5,1) ;
alter table test4_05 add did varchar(2);

update test4_05
set sum_credit =(
select sum(credit)
from pub.course natural join
(
select sid,cid,max(score) mscore
from pub.student_course
group by sid,cid
having max(score)>=60
)
where test4_05.sid=sid);

update test4_05
set did=(
select did
from (
select did,dname
from pub.department
union
select did,dname
from pub.department_41) department
where test4_05.dname= department.dname);

update test4_05
set did='00'
where did is null;

6
update test4_06
set name=replace(name,' ','');把空格替换成无空格

7
create table test4_07 as
select *
from pub.student_42;
update test4_07
set sex= replace( sex,' ','');//坑点：有的性别后面带空格
update test4_07
set sex= replace( sex,'性','');
8
create table test4_08 as
select *
from pub.student_42;
update test4_08
set class=replace(class,'级','');

9
create table test4_09 as
select *
from pub.student_42;

update test4_09
set age=(
select (2012-extract (year from birthday))
from pub.student_42
where test4_09.sid=sid
)
where test4_09.age is null;

10

create table test4_10 as
select *
from pub.student_42;

update test4_10
set name=replace(name,' ','');

update test4_10
set dname=replace(dname,' ','');

update test4_10
set age=(
select (2012-extract (year from birthday))
from pub.student_42
where test4_10.sid=sid
)
where test4_10.age is null;


• 1
点赞
• 2
评论
• 1
收藏
• 一键三连
• 扫一扫，分享海报

04-13

09-23
05-07 1378
10-11 342
02-15 2069
02-14 335
03-29 4066
01-06 118
02-20 676
08-29 1972
03-01 512