SQL语言增、删、改、查功能练习

一、数据库SQL语言增、删、改、查功能

1.查询选了1号课且选了2号课的学生的班号、学号
2. 查询选了1号课但不选2号课的学生的班号、学号
3.查询1班平均分在85分以上的同学班号、学号、姓名、性别、系、各科课程号及成绩
4.查询至少选了1班2号同学所选课的所有班号、学号及同学姓名
5. 查询不选1号课的学生班号及学号
6. 查询选2号课的学生名字及相应2号课成绩,按成绩从高到低排序
7. 统计学生选修课程的班号、学号及总学分
8. 统计1班选修3号课的学号及平均分
9. 把个人信息及选课信息插入到Student和SC 表及新增加一门“无机化学”课程信息
10. 删除选修3号课的所有选课信息并显示删除后的结果
11. 把选修1号课的所有男同学年龄增加1岁并显示最终学生Student信息
12. 把每个选课人的学号、班号及平均成绩插入到一个新表中。

二、视图SQL语言功能

1 使用企业管理器创建视图:在ST库中以“student”表为基础,建立信息系学生的视图V_ISStudent
2 使用SQL语句创建视图:
① 建立一个每个学生的学号、班号、姓名、选修的课名及成绩的视图S_C_GRADE;
② 建立信息系建立信息系选修了1号课程且成绩在90分以上的学生的视图V_IS_Score
③ 将各系学生人数,平均年龄定义为视图V_NUM_AVG。
3 查询以上所建的视图结果
4 查询选修了1号课程的信息系学生
5 在信息系学生的视图中找出年龄小于20岁的学生
6 将信息系学生视图V_ISStudent中学号一班2号的学生姓名改为“刘辰”
7 用SQL语句删除视图S_C_GRADE

三、源程序代码和实验结果

E-R图:
在这里插入图片描述
1.1查询选了1号课且选了2号课的学生的班号、学号

select distinct SCX.sno,SCX.sclass
from SC SCX
where exists ( select *
				from SC SCY
				where SCX.sno=SCY.sno and SCX.sclass=SCY.sclass and SCY.cno=1)
 and exists( select * 
			from SC SCZ 
			where SCX.sno=SCZ.sno and SCX.sclass=SCZ.sclass	and SCZ.cno=2);

在这里插入图片描述
1.2查询选了1号课但不选2号课的学生的班号、学号

select SCX.sno,SCX.sclass
from SC SCX
where exists ( select *
				from SC SCY
				where SCX.sno=SCY.sno and SCX.sclass=SCY.sclass and SCY.cno=1)
 and not exists( select * 
			from SC SCZ 
			where SCX.sno=SCZ.sno and SCX.sclass=SCZ.sclass	and SCZ.cno=2);

在这里插入图片描述
1.3查询1班平均分在85分以上的同学班号、学号、姓名、性别、系、各科课程号及成绩

select SC.sclass,SC.sno,sname,ssex,Sdept,cno,grade
from SC,Student
where SC.sclass=Student.sclass and SC.sno=Student.sno and SC.sclass=1 and SC.sno in
(select sno from SC where sclass=1 group by sno having avg(grade)>85);

在这里插入图片描述
1.4查询至少选了1班2号同学所选课的所有班号、学号及同学姓名

select distinct SCX.sclass,SCX.sno,sname
from Student,SC SCX
where Student.sno=SCX.sno and Student.sclass=SCX.sclass and not exists(
	select *
    from SC SCY
	where SCY.sclass='1' and SCY.sno='2' and not exists (
	select *
	from SC SCZ
	where SCZ.cno=SCY.cno and 
	SCZ.sno=SCX.sno and SCZ.sclass=SCX.sclass)

在这里插入图片描述
1.5查询不选1号课的学生班号及学号

select Student.sclass,Student.sno
from Student
where not exists (
		select *
		from SC
		where SC.sclass=Student.sclass and SC.sno=Student.sno and SC.cno=1)

在这里插入图片描述
1.6查询选2号课的学生名字及相应2号课成绩,按成绩从高到低排序

select Student.sname,grade
from SC,Student
where SC.sclass=Student.sclass and SC.sno=Student.sno and cno=2 
order by grade desc

在这里插入图片描述
1.7统计学生选修课程的班号、学号及总学分

select sclass,sno,sum(ccredit) sum_credit
from Course,SC
where Course.cno=SC.cno
group by sno,sclass

在这里插入图片描述
1.8统计1班选修3号课的学号及平均分

select avg(grade) avg_grade
from SC
where sclass=1 and cno=3
select sno
from SC
where sclass=1 and cno=3

在这里插入图片描述
1.9把个人信息及选课信息插入到Student和SC 表及新增加一门“无机化学”课程信息

insert into Course(cno,cname)values(8, '无机化学');

在这里插入图片描述
在这里插入图片描述
1.10删除选修3号课的所有选课信息并显示删除后的结果

delete from SC where cno=3;
select *
from SC;

在这里插入图片描述
1.11把选修1号课的所有男同学年龄增加1岁并显示最终学生Student信息

update  Student 
set sage=sage+1 
where ssex= '男'and exists
		(select * 
		from SC 
		where cno=1 and SC.sclass=Student.sclass and SC.sno=Student.sno);
select * 
from Student;

在这里插入图片描述
1.12把每个选课人的学号、班号及平均成绩插入到一个新表中

create table avg_grade(
	sno int not null,
	sclass int not null,
	avggrade float,
	primary key(sclass,sno) 
);
insert into avg_grade
select sno,sclass,avg(grade)
from SC
group by sclass,sno;
select *
from avg_grade

在这里插入图片描述
2.1使用企业管理器创建视图:在ST库中以“student”表为基础,建立信息系学生的视图V_ISStudent

create view V_ISStudent AS 
select * 
from Student 
where Sdept = 'IS' with check option;

select *
from V_ISStudent

在这里插入图片描述
2.2
① 建立一个每个学生的学号、班号、姓名、选修的课名及成绩的视图S_C_GRADE;

create view S_C_GRADE AS 
select Student.sno,Student.sclass,sname,cname,grade 
from Student join SC on (Student.sclass=SC.sclass and Student.sno=SC.sno)join Course on SC.cno=Course.cno;

select *
from S_C_GRADE

在这里插入图片描述
② 建立信息系建立信息系选修了1号课程且成绩在90分以上的学生的视图V_IS_Score

create view V_IS_Score AS 
select * 
from V_ISStudent 
where exists
		(select * 
		from SC 
		where cno=1 and grade>90 
		and V_ISStudent.sno=SC.sno 
		and V_ISStudent.sclass=SC.sclass);

select * 
from V_IS_Score 

在这里插入图片描述
③ 将各系学生人数,平均年龄定义为视图V_NUM_AVG。

create view V_NUM_AVG AS
select Sdept,count(*) num,avg(sage) avg_age 
from Student 
group by Sdept;
select  * 
from V_NUM_AVG

在这里插入图片描述
2.3查询以上所建的视图结果
见上题
2.4查询选修了1号课程的信息系学生

select * from V_ISStudent 
where exists
(select *
from SC 
where cno=1 and V_ISStudent.sno=SC.sno 
and V_ISStudent.sclass=SC.sclass);

在这里插入图片描述
2.5在信息系学生的视图中找出年龄小于20岁的学生

select * 
from V_ISStudent 
where sage<20;

在这里插入图片描述
2.6将信息系学生视图V_ISStudent中学号一班2号的学生姓名改为“刘辰”

update V_ISStudent 
set sname= '刘辰' 
where sclass=1 and sno=2;

select sname
from V_ISStudent
where sclass=1 and sno=2

在这里插入图片描述
2.7用SQL语句删除视图S_C_GRADE

drop view S_C_GRADE; 

在这里插入图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

20230921

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值