四、分组查询 1、统计<学生选修信息表>,统计每个课程的选修人数 2、统计<学生选修信息表>,统计每个同学的总成绩 3、统计<学生选修信息表>,显示有两门以上课程不及格的学生的学号 4、统计<学生信息表>,统计每个班级中的最大年龄是多少
时间: 2024-03-01 18:54:57 浏览: 78
好的,以下是针对你的问题的SQL查询语句:
1. 统计每个课程的选修人数
```sql
SELECT 课程编号, COUNT(*) AS 选修人数 FROM studentinfo GROUP BY 课程编号;
```
2. 统计每个同学的总成绩
```sql
SELECT 学号, SUM(成绩) AS 总成绩 FROM studentinfo GROUP BY 学号;
```
3. 显示有两门以上课程不及格的学生的学号
```sql
SELECT 学号 FROM studentinfo WHERE 成绩 < 60 GROUP BY 学号 HAVING COUNT(*) >= 2;
```
4. 统计每个班级中的最大年龄是多少
```sql
SELECT 班级, MAX(DATEDIFF(CURDATE(), 出生日期) / 365) AS 最大年龄 FROM studentinfo GROUP BY 班级;
```
希望以上查询语句能够帮助你解决问题。注意,第三个问题中我使用了HAVING子句来过滤出有两门以上不及格课程的学生,而不是使用WHERE子句。
相关问题
写一份数据库原理的实验报告使用企业管理器建立学生选课数据库“StdentW101”,数据 库表为S(学生信息表)、C(课程信息表)、SC(选课信息 表):1.检索丁宝康老师所授课程的课程号和课程名 2.检索年龄大于19岁的男学生的学号和姓名。 3. 检索至少选修两门课程的学生学号。 4. 统计有学生选修的课程门数。 5. 求选修课程号为2的学生的平均年龄。 6.求马良老师所授课程的每门课程的学生平均成绩 7.统计每门课程的学生选修人数(超过1人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。 8. 检索姓名以王打头的所有学生的姓名和年龄。 9.在SC中检索成绩为空值的学生学号和课程号。SNO CNO GHADE 96001 1 92 96001 2 85 96001 3 88 96002 2 90 96002 3 80 96002 1 7.5 96003 95 96003 7 98 96004 1 92 96005 1 59 96005 6 84
实验目的:
1. 了解数据库的基本原理和操作;
2. 掌握企业管理器的使用方法;
3. 实现基本的SQL语句。
实验步骤:
1. 打开企业管理器,新建一个名为“StdentW101”的数据库,并在其中创建三个表格,分别为S(学生信息表)、C(课程信息表)和SC(选课信息表)。
2. 对于S表,创建以下字段:SNO(学号)、SNAME(姓名)、SEX(性别)、AGE(年龄)和BIRTHDAY(出生日期)。
3. 对于C表,创建以下字段:CNO(课程号)、CNAME(课程名称)和TNO(教师号)。
4. 对于SC表,创建以下字段:SNO(学号)、CNO(课程号)和GRADE(成绩)。
5. 向S表中插入学生信息,向C表中插入课程信息,向SC表中插入选课信息。
6. 使用SQL语句实现以下查询:
1. 检索丁宝康老师所授课程的课程号和课程名
```sql
SELECT C.CNO, C.CNAME
FROM C
WHERE C.TNO = (
SELECT T.TNO
FROM T
WHERE T.TNAME = '丁宝康'
)
```
2. 检索年龄大于19岁的男学生的学号和姓名。
```sql
SELECT S.SNO, S.SNAME
FROM S
WHERE S.AGE > 19 AND S.SEX = '男'
```
3. 检索至少选修两门课程的学生学号。
```sql
SELECT SC.SNO
FROM SC
GROUP BY SC.SNO
HAVING COUNT(*) >= 2
```
4. 统计有学生选修的课程门数。
```sql
SELECT COUNT(DISTINCT SC.CNO)
FROM SC
```
5. 求选修课程号为2的学生的平均年龄。
```sql
SELECT AVG(S.AGE)
FROM S
WHERE S.SNO IN (
SELECT SC.SNO
FROM SC
WHERE SC.CNO = 2
)
```
6. 求马良老师所授课程的每门课程的学生平均成绩
```sql
SELECT SC.CNO, AVG(SC.GRADE)
FROM SC, C
WHERE SC.CNO = C.CNO AND C.TNO = (
SELECT T.TNO
FROM T
WHERE T.TNAME = '马良'
)
GROUP BY SC.CNO
```
7. 统计每门课程的学生选修人数(超过1人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。
```sql
SELECT SC.CNO, COUNT(DISTINCT SC.SNO) AS NUM
FROM SC
GROUP BY SC.CNO
HAVING COUNT(DISTINCT SC.SNO) > 1
ORDER BY NUM DESC, SC.CNO ASC
```
8. 检索姓名以王打头的所有学生的姓名和年龄。
```sql
SELECT S.SNAME, S.AGE
FROM S
WHERE S.SNAME LIKE '王%'
```
9. 在SC中检索成绩为空值的学生学号和课程号。
```sql
SELECT SC.SNO, SC.CNO
FROM SC
WHERE SC.GRADE IS NULL
```
实验结论:
通过企业管理器建立学生选课数据库“StdentW101”,并使用SQL语句实现了多种查询操作,实现了对数据库的基本操作和实际应用。
如何使用SQL命令来查询每个学生及其所选修的课程详细信息,包括来自成绩表、学生信息表和选修课程表的数据?
要在SQL中查询每个学生及其所选修的课程详细信息,你需要结合三个表(假设分别为`students`、`courses` 和 `enrollments`)。这里是一个基本的例子:
```sql
SELECT s.student_id, s.student_name, c.course_id, c.course_title, e.grade
FROM students s
JOIN enrollments e ON s.student_id = e.student_id
JOIN courses c ON e.course_id = c.course_id;
```
这个查询做了以下操作:
1. 使用`JOIN`关键字将`students`表与`enrollments`表连接,依据学生的ID(`student_id`)进行匹配。
2. 然后再将`enrollments`表与`courses`表连接,同样依据课程ID(`course_id`)匹配,获取每个学生所选修的具体课程信息。
3. 最后选择了要显示的学生ID (`student_id`)、姓名 (`student_name`)、课程ID (`course_id`)、课程标题 (`course_title`) 和成绩 (`grade`)。
阅读全文