1.查询每个学生的选课情况
使用内连接和外连接
当我们涉及到两张表都要涉及的时候,就采用内连接!
当我们涉及其中一张表的时候,就采取外连接!
select * from student inner join//内连接 sc on student.sno=sc.sno
2.查询每个学生及其选修课程的情况, 包括没有选修课程的学生
select * from sc left join//左连接 sc on student.sno=sc.sno
3.查询每门课的选课人数,包括选课人数为0的课程。
SELECT Course.Cno,COUNT(SC.Cno) FROM Course LEFT JOIN SC ON Course.Cno=SC.Cno GROUP BY Course.Cno
4.查询选修了”10010”号课程的学生姓名。
SELECT Sname FROM Student WHERE Sno IN (SELECT Sno FROM SC WHERE Cno='10010')
5.查询选修了“计算机基础”这门课的学生学号和学生姓名
SELECT Sno,Sname FROM Student WHERE Sno IN (SELECT Sno FROM SC WHERE Cno IN (SELECT Cno FROM Course WHERE Cname='计算机基础'))
6.查询选修“计算机基础”这门课成绩在80分以上的学生学号,姓名。
SELECT Sno,Sname FROM Student WHERE Sno IN (SELECT Sno FROM SC WHERE Score>90 AND Cno IN (SELECT Cno FROM Course WHERE Cname='计算机基础'))
7.查询与“王磊”在同一个系的学生信息
SELECT Sno,Sname FROM Student WHERE Sdept IN (SELECT Sdept FROM Student WHERE Sname='王磊')
8.查询每个学生超过他选修课平均成绩的课程号。
SELECT Sno,Cno FROM SC x WHERE Score>= (SELECT AVG(Score) FROM SC y WHERE x.Sno=y.Sno)
9.查询其他系中比“计算机系”某一学生年龄小的学生姓名和年龄(分别使用ANY谓词和MAX函数完成)。
--ANY谓词 SELECT Sname,Sage FROM Student WHERE Sdept!='计算机系' AND Sage<ANY (SELECT Sage FROM Student WHERE Sdept='计算机系') --MAX函数 SELECT Sname,Sage FROM Student WHERE Sdept!='计算机系' AND Sage< (SELECT MAX(Sage) FROM Student WHERE Sdept='计算机系')
10.查询其他系中比“计算机系”所有学生年龄都小的学生姓名及年龄(分别使用ALL谓词和MIN函数完成)。
--ALL谓词 SELECT Sname,Sage FROM Student WHERE Sdept!='计算机系' AND Sage<ALL (SELECT Sage FROM Student WHERE Sdept='计算机系') --MIN函数 SELECT Sname,Sage FROM Student WHERE Sdept!='计算机系' AND Sage< (SELECT MIN(Sage) FROM Student WHERE Sdept='计算机系')
11.查询选修了10001号课程的学生姓名(使用EXISTS谓词)
SELECT Sno,Sname FROM Student WHERE EXISTS (SELECT * FROM SC WHERE Sno=Student.Sno AND Cno='10001')
12.查询没有选修10001号课程的学生姓名。
SELECT Sname FROM Student WHERE NOT EXISTS (SELECT * FROM SC WHERE Sno=Student.Sno AND Cno='10001')
13.查询选修了全部课程的学生学号和姓名
SELECT Sno,Sname FROM Student WHERE NOT EXISTS (SELECT * FROM Course WHERE NOT EXISTS (SELECT * FROM SC WHERE SC.Sno=Student.Sno AND Course.Cno=SC.Cno))