写在前面:本文中可能有错误,还请大佬斧正,如果小伙伴有什么好的方法,也可以发给我,我添加到里面
4、 多表查询
(1) 查询计算机系(CS)选修了 2 门及以上课程的学生的学号。
(2) 查询至少选修一门课程的女学生姓名。
(3) 查询至少选修两门课程的学生学号。
(4) 查询 Student 表与 SC 表的广义笛卡儿积。
(5) 查询 Student 表与 SC 表基于学号 SNO 的等值连接。
(6) 查询 Student 表与 SC 表基于学号 SNO 的自然连接。
(7) 查询课程之先修课的先修课(自身连接例)。
(8) 查询学生及其课程、成绩等情况(不管是否选课,均需列出学生信息) 。 (9) 查询学生及其课程成绩与课程及其学生选修成绩的明细情况(要求学生与课程均需 全部列出) 。
(10) 查询性别为男、课程成绩及格的学生信息以及课程号、成绩。
----------------------多表查询----------------------
--1.查询计算机系(CS)选修了 2 门及以上课程的学生的学号
select Student.Sno
from Student
inner join SC on Student.Sno = SC.Sno
where Student.Sdept='CS'
group by Student.Sno
having COUNT(*) >= 2
--2.查询至少选修一门课程的女学生姓名
select Student.Sname
from Student
inner join SC on Student.Sno = SC.Sno
where Student.Ssex = '女'
group by Student.Sname
having COUNT(*) >= 1
--3.查询至少选修两门课程的学生学号
select Student.Sno
from Student
inner join SC on Student.Sno = SC.Sno
group by Student.Sno
having COUNT(*) >= 2
--4.查询 Student 表与 SC 表的广义笛卡儿积
select *
from Student,SC
--5.查询 Student 表与 SC 表基于学号 SNO 的等值连接
select *
from Student
inner join SC on Student.Sno = SC.Sno
--6.查询 Student 表与 SC 表基于学号 SNO 的自然连接
select Student.*,SC.Cno,SC.Grade
from Student,SC
where Student.Sno = SC.Sno
--7.查询课程之先修课的先修课(自身连接例)
select Course.Cpno
from Course
where Course.Cno in(
select Course.Cpno
from Course
)
--8.查询学生及其课程、成绩等情况(不管是否选课,均需列出学生信息)
select *
from Student
left join SC on SC.Sno = Student.Sno
left join Course on SC.Cno = Course.Cno
--9.查询学生及其课程成绩与课程及其学生选修成绩的明细情况
select *
from SC
inner join Student on SC.Sno = Student.Sno
inner join Course on SC.Cno = Course.Cno
--10.查询性别为男、课程成绩及格的学生信息以及课程号、成绩
select *
from Student
inner join SC on Student.Sno = SC.Sno
where Student.Ssex = '男'
and SC.Grade >= 60
group by Student.Sno