建立一个student数据库包括:
学生:S(Sno,Sname,Ssex,Sage,Sdept),
课程:C(Cno,Cname,Term,Credit),
选修:SC(Sno,Cno,Score);
查询选修了课程名为“数据库系统”课程的学生的学号、姓名、成绩:
SELECT S.Sno,Sname,Score FROM S,SC,C WHERE C.Cname IN ("数据库系统");
查询选修了全部课程的学生姓名和所在的专业:
SELECT Sname,Sdept FROM S WHERE Sno IN (SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*)=(SELECT COUNT(*) FROM C));
查询没有选择课程名为“数据库系统”的学生姓名和专业:
SELECT Sname,Sdept FROM S WHERE Sno NOT IN (SELECT Sno FROM SC WHERE Cno=(SELECT Cno FROM C WHERE Cname="数据库系统"));
检索所有比唐婉年龄大的学生的姓名、年龄和性别:
SELECT Sname,Sage,Ssex FROM S WHERE Sage >(SELECT Sage FROM S WHERE Sname="唐婉") ORDER BY Sage ASC;
检索选修了课程号为“2”课程的学生中成绩最高的学生的学号:
SELECT Sno FROM SC WHERE SC.Cno="2" AND Score>=ALL(SELECT Score FROM SC WHERE Cno="2");
检索选修了4门以上课程的学生学号和总成绩(不统计不及格的课程),并要求按照总承成绩的降序排列:
SELECT Sno,Score FROM SC GROUP BY Cno HAVING Cno>'4' AND Score>='60' ORDER BY Score DESC;
检索李白同学没有选修的课程的课程号:
SELECT Cno FROM C WHERE NOT EXISTS(SELECT * FROM S,SC WHERE S.Sno=SC.Sno AND SC.Cno=C.Cno AND Sname='李白');
注意:
- group by 的用法,可用于分类,结合count()可以查询出某一类的个数。
- order by 可以用来排序,asc表示升序排列,desc表示降序排列。
- 表示最高的用法>=all(***);疑问其和max();的区别。
- 理清楚从哪张表里面去取数据最方便,一步步联想推导可以查出想要的结果,注意函数的用法。
越努力越幸运!!
2017年4月26日
网友评论