数据库练习
- 1、在Course表中添加“教师”列(20个长度的变长字符串)
- 2、为每门课程添加教师信息。
- 3、将教师列修改为非空列。
- 4、查询选修了刘老师的课程的学生。
- 5、检索选修了课程号为C01或C02课程,且成绩高于或等于70分的学生的姓名,课程名和成绩。
- 6、检索所有学生的姓名、所选课程的课程名和成绩以及课程号,并且按成绩的降序和课程号的升序进行排列(使用外连接将没有选课的同学列出来)。
- 7. 列出没有选课的学生姓名
- 8. 列出平均分最高的学生所在系的所有学生的姓名
- 9.查询CS系C01课程的成绩比C01课程的平均分高的学生学号
- 10.查询既选修了C01又选修了C02的学生
- 11.统计及格的课程数在四门以上的学生所选课程的平均成绩。最后按降序列出平均成绩名次名单来。
- 12.检索所有CS系学生都选修了的课程(列出课程号)
- 13.查询年龄高于其所在系的平均年龄的学生姓名
- 14.查询每位同学的选课中成绩最高的课程对应的学号,姓名,课程名,成绩
- 15.为MA系学生选修必修课C05
- 16.将CS系,C01课程学生的成绩加10分
- 17.将每位同学的最低分加10分(选)
- 18.将”数据库”的选课记录全部删除
- 19.
1、在Course表中添加“教师”列(20个长度的变长字符串)
分析:无
sql语句:
alter table course add teacher varchar(20);
2、为每门课程添加教师信息。
分析:一条条添加即可,下面只是其中一条
sql语句:
update Course
set teacher='刘老师'
where Cno='10086';
3、将教师列修改为非空列。
分析:无
alter table course alter column teacher varchar(20) not Null;
4、查询选修了刘老师的课程的学生。
分析:只要学生有一门选了刘老师课程的就符合要求,然后刘老师是只要姓刘就符合要求。
方法一:通过子查询,层层传递查询结果。
sql语句:
select * from Student
where exists(select * from SC where sno=student.sno and
exists(select * from Course where Cno=SC.Cno and teacher like '刘%'));
方法二:把需要的表连接在一张表上进行查询。
sql语句:
select Student.Sno,Sname,Ssex,Sage,Sdept from Student,Sc,Course
where Student.Sno=sc.sno and sc.cno=course.cno and teacher like '刘%';
5、检索选修了课程号为C01或C02课程,且成绩高于或等于70分的学生的姓名,课程名和成绩。
分析:因为结果是在三张表里,故需要把三张表进行内连接。注意一下’或者‘和’并且‘运算规则即可
sql语句:
select Sname,Cname,grade from student,sc,course
where Student.Sno=sc.sno and sc.cno=course.cno and (sc.cno='c01' or sc.cno='c02') and grade>=70;
6、检索所有学生的姓名、所选课程的课程名和成绩以及课程号,并且按成绩的降序和课程号的升序进行排列(使用外连接将没有选课的同学列出来)。
知识点:外连接和内连接:
sql语句:
select Sname,Cname,grade,Sc.cno
from (student left JOIN Sc ON SC.sno= Student.sno) left JOIN course ON sc.cno=course.cno
order by grade desc,Cno;
7. 列出没有选课的学生姓名
分析:没什么好分析的
方法一:
sql语句:
select Sname
from student left JOIN Sc ON SC.sno= Student.sno
where Cno is Null;
方法二:
sql语句:
select Sname
from student
where not exists(select * from Sc where sno=student.sno);
8. 列出平均分最高的学生所在系的所有学生的姓名
分析:我发现我感觉题目会有两种意思:
第一种:平均分最高的学生,他所在系的所有学生姓名。(针对个人分组)
第二种:平均分最高的系,这个系的所有学生姓名。