(1)查询性别为“男”的所有学生的名称并按学号升序排列。
SELECT SnameFROM StudentsWHERE Ssex='男'ORDER BY Sno(2)查询学生的选课成绩合格的课程成绩,并把成绩换算为积分。
积分的计算公式为:[1+(考试成绩-60)*0.1]*Ccredit。
考试成绩>=60 否则=0SELECT Sno, Tno, o, Score, 'Point of Score',CONVERT(FLOAT(1), (Score-60)*0.1*Ccredit+Ccredit)FROM Courses, ReportsWHERE Score>=60 AND o=oUNIONSELECT Sno, Tno, o, Score, 'Point of Score', 0FROM Courses, ReportsWHERE o=o AND (Score < 60 OR Score ISNULL)(3)查询学分是3或4的课程的名称。
SELECT CnameFROM CoursesWHERE Ccredit IN('3','4')(4)查询所有课程名称中含有“算法”的课程编号。
SELECT CnameFROM CoursesWHERE Cname LIKE '%算法%'/*查询得到算法分析与设计、数据结构与算法分析*/(5)查询所有选课记录的课程号(不重复显示)。
SELECT DISTINCT Cno FROM Reports(6)统计所有老师的平均工资。
SELECT A VG(Tsalary) FROM Teachers(7)查询所有教师的编号及选修其课程的学生的平均成绩,按平均成绩降序排列。
SELECT Tno,A VG(Score)FROM ReportsGROUP BY TnoORDER BY A VG(Score) DESC(8)统计各个课程的选课人数和平均成绩。
SELECT Cno,COUNT(Sno),A VG(Score)FROM ReportsGROUP BY Cno(9)查询至少选修了三门课程的学生编号和姓名。
SELECT Sno,SnameFROM StudentsWHERE Sno IN(SELECT SnoFROM ReportsGROUP BY SnoHA VING COUNT(*)>=3)(10)查询编号S26的学生所选的全部课程的课程名和成绩。
SELECT ame,Reports.ScoreFROM Courses,ReportsWHERE Reports.Sno='S26' AND o=o(11)查询所有选了“数据库原理及其应用”课程的学生编号和姓名。
SELECT Sno,SnameFROM StudentsWHERE Sno IN(SELECT Reports.SnoFROM Reports,CoursesWHERE o=o AND ame='数据库原理及其应用')(12)求出至少被两名学生选修的课程编号。
SELECT DISTINCT oFROM Reports X,Reports YWHERE o=o AND X.Sno<Y.Sno(13)查询选修了编号S26的学生所选的某个课程的学生编号。
SELECT Y.SnoFROM Reports X,Reports YWHERE o=o AND X.Sno='S26'/*注:在本题中,如果要求是“查询选修了编号S26的学生所选的某个课程的其他学生编号”时,也就是不包含编号S26学生自身的情况时,在查询条件WHERE中,还需要加上条件X.Sno<Y.Sno*/(14)查询学生的基本信息及选修课程编号和成绩。
SELECTStudents.Sno,Students.Sname,Students.Semail,Students.Scredit,Students.Ssex,o,Reports.ScoreFROM Students JOIN Reports ON Students.Sno=Reports.Sno(15)查询学号S52的学生的姓名和选修的课程名称及成绩。
SELECT Students.Sname,ame,Reports.ScoreFROM Students,Courses,ReportsWHERE Students.Sno=Reports.Sno AND o=oAND Students.Sno='S52'(16)查询和学号S52的学生同性别的所有学生资料。
SELECT *FROM StudentsWHERE Ssex=(SELECT SsexFROM StudentsWHERE Sno='S52')(17)查询所有选课的学生的详细信息。
SELECT *FROM StudentsWHERE Sno IN(SELECT SnoFROM Reports)(18)查询没有学生选的课程的编号和名称。
SELECT Cno,CnameFROM CoursesWHERE Cno NOT IN(SELECT CnoFROM Reports)(19)查询选修了课程名为C++的学生学号和姓名。
SELECT Sno,SnameFROM StudentsWHERE Sno IN(SELECT SnoFROM ReportsWHERE Cno IN(SELECT CnoFROM CoursesWHERE Cname='C++'))(20)找出选修课程UML或者课程C++的学生学号和姓名。
SELECT Sno,SnameFROM StudentsWHERE Sno IN(SELECT SnoFROM ReportsWHERE Cno IN(SELECT CnoFROM CoursesWHERE Cname='C++' OR Cname='UML'))(21)找出和课程UML或课程C++的学分一样课程名称。
SELECT CnameFROM CoursesWHERE Ccredit=SOME(SELECT CcreditFROM CoursesWHERE Cname='UML' OR Cname='C++')/*注:在本题中,将=SOME换成=ANY或IN都可行。
*/ (22)查询所有选修编号C01的课程的学生的姓名。
SELECT SnameFROM StudentsWHERE EXISTS(SELECT *FROM ReportsWHERE o='C01' AND Reports.Sno=Students.Sno)(23)查询选修了所有课程的学生姓名。
SELECT SnameFROM StudentsWHERE NOT EXISTS(SELECT *FROM Reports XWHERE NOT EXISTS(SELECT *FROM Reports YWHERE Y.Sno=Students.Sno AND o=o))(24)利用集合查询方式,查询选修课程C++或选择课程JA V A的学生的编号、姓名和积分。
SELECT Sno,Sname,ScreditFROM StudentsWHERE Sno IN(SELECT SnoFROM ReportsWHERE o=(SELECT oFROM CoursesWHERE ame='C++'))UNIONSELECT Sno,Sname,ScreditFROM StudentsWHERE Sno IN(SELECT SnoFROM ReportsWHERE o=(SELECT oFROM CoursesWHERE ame='JA V A'))(25)实现集合交运算,查询既选修课程C++又选修课程JA V A的学生的编号、姓名和积分。
SELECT Sno,Sname,ScreditFROM StudentsWHERE Sno IN(SELECT X.SnoFROM Reports X,Reports YWHERE(o=(SELECT CnoFROM CoursesWHERE Cname='C++')AND o=(SELECT CnoFROM CoursesWHERE Cname='JA V A'))AND X.Sno=Y.Sno)(26)实现集合减运算,查询选修课程C++而没有选修课程JA V A的学生的编号。
基本的语句模式如下:SELECT Sno FROM ReportsWHERE Cno='C01'AND Sno NOT IN(SELECT Sno FROM Reports WHERECno='C03')本题具体的SQL语句SELECT * FROM StudentsWHERE Sno IN( SELECT Sno FROM ReportsWHERE Cno=(SELECT Cno FROM Courses WHERE Cname='C++')AND Sno NOT IN (SELECT Sno FROM Reports WHERECno=(SELECT Cno FROM Courses WHERE Cname='JA V A'))) (28)求平均成绩在75分以上的课程名select ame,avg(Score) as pjcjfrom COURSE, Reportswhere om= ogroup by ohaving avg(Score)>75(29) 检索“张三”同学不学的课程的课程号SELECT distinct cnofrom Courseswhere cno not in (select ofrom Students, Reportswhere Students.sno= Reports.snoand Students.sname='张三' )。