对于教学数据库的三个基本表: Stdent(SNO,SNAME,AGE,SEX) SC(SNO,CNO,GRADE) Course(CNO,CNAME,TEACHER) 试用SQL的查询语句表达下列查询5)统计每门课程的学生选修人数(超过15人的课程才统计)。要求显示课程号,课程名和人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。
时间: 2024-03-20 19:44:48 浏览: 143
以下是符合要求的SQL查询语句:
```
SELECT Course.CNO, Course.CNAME, COUNT(*) AS num
FROM Course, SC
WHERE Course.CNO = SC.CNO
GROUP BY Course.CNO, Course.CNAME
HAVING COUNT(*) > 15
ORDER BY num DESC, Course.CNO ASC;
```
解释一下每个语句的含义:
- `SELECT Course.CNO, Course.CNAME, COUNT(*) AS num`:选择要查询的列,包括课程号、课程名和选修人数(使用 COUNT(*) 统计)。
- `FROM Course, SC`:查询的数据来源为 Course 表和 SC 表。
- `WHERE Course.CNO = SC.CNO`:将 Course 表和 SC 表通过课程号关联起来。
- `GROUP BY Course.CNO, Course.CNAME`:按照 Course 表中的课程号和课程名分组。
- `HAVING COUNT(*) > 15`:只保留选修人数超过 15 人的课程。
- `ORDER BY num DESC, Course.CNO ASC`:按照选修人数降序排列,如果人数相同则按照课程号升序排列。
相关问题
对于教学数据库的三个基本表: Stdent(SNO,SNAME,AGE,SEX) SC(SNO,CNO,GRADE) Course(CNO,CNAME,TEACHER) 1.求刘老师所授课程的每门课程的成绩的最高分和最低分。
很抱歉,之前回答的仍然是正确的答案。以下是 SQL 语句:
```
SELECT CNO, MAX(GRADE) AS MAX_GRADE, MIN(GRADE) AS MIN_GRADE
FROM SC
WHERE SNO IN (
SELECT SNO
FROM Student
WHERE TEACHER = '刘老师'
)
GROUP BY CNO
```
这条 SQL 语句中,我们首先使用子查询筛选出刘老师所授课的学生,然后在 SC 表中根据 CNO 分组,求出每门课程的成绩的最高分和最低分。
程序设计题(50) 对于教学数据库的三个基本表: Stdent(SNO,SNAME, AGE,SEX) SC(SNO,CNO,GRADE) HERE Course(CNO,CNAME, TEACHER)试用SQL的查询语句表达下列查询: () 1)检索学号为S3的学生所学课程的课程号与成绩。(5分) 2)检索年龄大于20岁的女学生的姓名和性别。(5分) 3)检索“数据库”课程的课程号。(10分) L 4)检索王敏同学没有选修的课程的课程号。(10分) 5)统计每门课程的学生选修人数(超过15人的课程才统计)。要求显示课程 号,课程名和人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。(10分) 6)求刘老师所授课程的每门课程的成绩的最高分和最低分。(10分)
1) SELECT CNO, GRADE FROM SC WHERE SNO = 'S3';
2) SELECT SNAME, SEX FROM Student WHERE AGE > 20 AND SEX = '女';
3) SELECT CNO FROM Course WHERE CNAME = '数据库';
4) SELECT CNO FROM Course WHERE CNO NOT IN (SELECT CNO FROM SC WHERE SNO = '王敏');
5) SELECT CNO, CNAME, COUNT(*) AS NUM FROM Course JOIN SC ON Course.CNO = SC.CNO GROUP BY Course.CNO, CNAME HAVING COUNT(*) > 15 ORDER BY NUM DESC, CNO ASC;
6) SELECT SC.CNO, MAX(GRADE), MIN(GRADE) FROM SC JOIN Course ON SC.CNO = Course.CNO WHERE Course.TEACHER = '刘老师' GROUP BY SC.CNO;
阅读全文