设教学数据库Education有三个关系:
学生关系S(SNO,SNAME,AGE,SEX,SDEPT);
学习关系SC(SNO,CNO,GRADE);
课程关系C(CNO,CNAME,CDEPT,TNAME).
查询问题:
1、查所有年龄在20岁以下的学生姓名及年龄。
SELECT SNAME,AGE FROM S WHERE AGE<20
2、查考试成绩有不及格的学生的学号。
SELECT DISTINCT SNO FROM SC WHERE GRADE<60
3、查所年龄在20至23岁之间的学生姓名、系别及年龄。
SELECT SNAME,SDEPT,AGE FROM S WHERE AGE BETWEEN 20 AND 23
4、查计算机系、数学系、信息系的学生姓名、性别。
SELECT SNAME,SEX FROM S WHERE SDEPT IN ('CS','MA','IS')
5、查既不是计算机系、数学系、又不是信息系的学生姓名、性别。
SELECT SNAME,SEX FROM S WHERE SDEPT NOT IN ('CS','MA','IS')
6、查所有姓“刘”的学生的姓名、学号和性别。
SELECT SNAME,SNO,SEX FROM S WHERE SNAME LIKE '刘%'
7、查姓“上官”且全名为3个汉字的学生姓名。
SELECT SNAME FROM S WHERE SNAME LIKE '上官_'
8、查所有不姓“张”的学生的姓名。
SELECT SNAME FROM S WHERE SNAME NOT LIKE '张%'
9、查DB_Design课程的课程号。
SELECT CNO FROM C WHERE CNAME = 'DB_Design'
10、查缺考(即GRADE没有赋值)的学生的学号和课程号。
SELECT SNO,CNO FROM SC WHERE GRADE IS NULL
11、查年龄为空值的学生的学号和姓名。
SELECT SNO,SNAME FROM S WHERE AGE IS NULL
12、查计算机系20岁以下的学生的学号和姓名。
SELECT SNO,SNAME FROM S WHERE SDEPT = 'CS' AND AGE<20
13、查计算机系、数学系、信息系的学生姓名、性别。
SELECT SNAME,SEX FROM S WHERE SDEPT IN ('CS','MA','IS')
14、查询选修了C3课程的学生的学号和成绩,其结果按分数的降序排列。
SELECT SNO,GRADE FROM SC WHERE CNO = 'C3' ORDER BY GRADE DESC
15、查询全体学生的情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列。
SELECT * FROM S ORDER BY SDEPT ASC,AGE DESC
16、查询学生总人数。
SELECT COUNT(*) FROM S
17、查询选修了课程的学生人数。
SELECT COUNT(DISTINCT SNO) FROM SC
18、计算选修了C1课程的学生平均成绩。
SELECT AVG(GRADE) FROM SC WHERE CNO = 'C1'
19、查询学习C3课程的学生最高分数。
SELECT MAX(GRADE) FROM SC WHERE CNO = 'C3'
20、查询各个课程号与相应的选课人数。
SELECT CNO,COUNT(SNO) FROM SC GROUP BY CNO
21、查询计算机系选修了3门以上课程的学生的学号。
SELECT SNO FROM S,SC WHERE SDEPT = 'CS' AND S.SNO = SC.SNO GROUP BY SNO HAVING COUNT(*)>3
22、求基本表S中男同学的每一年龄组(超过50人)有多少人?要求查询结果按人数升序排列,人数相同按年龄降序排列。
SELECT AGE,COUNT(SNO) FROM S GROUP BY AGE HAVING COUNT(*)>50 ORDER BY COUNT(*) ASC,AGE DESC
23、查询每个学生及其选修课程的情况。
SELECT S.SNO,SNAME,AGE,SEX,SDEPT,CNO,GRADE FROM S,SC WHERE S.SNO = SC.SNO
24、查询选修了C2课程且成绩在90分以上的所有学生。
SELECT SNO FROM SC WHERE CNO = 'C2' AND GRADE >90
25、查询每个学生选修的课程名及其成绩。
SELECT CNAME,GRADE FROM SC GROUP BY SNO
26、统计每一年龄选修课程的学生人数。
SELECT AGE,COUNT(DISTINCT S.SNO) FROM S,SC WHERE S.SNO = SC.SNO GROUP BY AGE
27、查询选修了C2课程的学生姓名。
连接查询
SELECT SNAME FROM S,SC WHERE CNO = 'C2' AND S.SNO = SC.SNO
嵌套查询
SELECT SNAME FROM S WHERE SNO IN (SELECT SNO FROM SC WHERE CNO = 'C2')
28、查询与“张三”在同一个系学习的学生学号、姓名和系别。
嵌套查询
SELECT SNO,SNAME,SDEPT FROM S WHERE SDEPT IN (SELECT SDEPT FROM S WHERE SNAME = '张三')
自身连接
SELECT SNO,SNAME,SDEPT FROM S S1, S S2 WHERE S1.SDEPT = S2.SDEPT AND S2.SNAME = '张三'
29、查询选修课程名为“数据库”的学生学号和姓名。
连接查询
SELECT SNO,SNAME FROM S,SC,C WHERE CNO = '数据库' AND S.SNO = SC.SNO AND C.CNO = SC.CNO
嵌套查询
SELECT SNO,SNAME FROM S WHERE SNO IN (SELECT SNO FROM SC WHERE CNO IN (SELECT SNO FROM C WHERE CNAME = '数据库'))