现有学生课程数据库的三张表,
学生表 Student(Sno,Sname,Ssex,Sage,Sdept):Sno-学号,Sname-姓名,Ssex-性别,Sage-年龄,Sdept-所在系
课程表Course(Cno,Cname,Cpno,Ccredit):Cno-课程号,Cname-课程名,Cpno-选修课号,Ccredit-学分
学生选课表SC(Sno,Cno,Grade):Sno-学号,Cno-课程号,Grade-成绩
问题:
1、求各个课程号及其相应的选课人数,按照选课人数降序排列
2、求所有学生的姓名以及其选修课程的课程名。注意有部分学生未选任何课程
3、求与“张三”在同一个系学习的学生学号和姓名
4、查询没有选修1号课程的学生姓名
答案
1 select * from SC order by (select count(Cno)from SC group by Cno) asc
2.select Sname,Cname,Cpno from Student left join (
select Sno ,Cno ,Cname ,Cpno ,Ccredit from Course inner jion SC on Course.Cno=SC.Cno)t on Course.Sno=t.Sno
3. select Sno,Sname ,Sdept from Student where Sdept = (select Sdept from Student where Sname='张三' )
4. select Sname from Student where Sdept ont in(Sdept='选修一号')
首选你这第一个都不对啊,你也没查出课程号及其相应的选课人数,你是查询的sc表的所有信息,参考下这个,没有表也不知道有问题没
1、SELECT Cno, COUNT(*) AS num FROM SC GROUP BY Cno ORDER BY num DESC;
2、SELECT Student.Sname, Course.Cname FROM Student LEFT JOIN SC ON Student.Sno = SC.Sno LEFT JOIN Course ON SC.Cno = Course.Cno;
3、SELECT Sno, Sname FROM Student WHERE Sdept = (SELECT Sdept FROM Student WHERE Sname = '张三');
4、SELECT Sname FROM Student WHERE Sno NOT IN (SELECT Sno FROM SC WHERE Cno = '1');