在student_info(学号,姓名)和grade(学号,课程编号)和curriculum(课程编号,课程名称)3. 查询选课人数大于等于3人的课程编号、课程名称、人数。
时间: 2024-09-30 17:06:08 浏览: 47
要查询选课人数大于等于3人的课程编号、课程名称以及对应的人数,你需要使用SQL查询来联接三个表:`student_info`,`grade` 和 `curriculum`。假设表之间的关联是通过学号连接`student_info`和`grade`,并通过课程编号连接`grade`和`curriculum`。
这里是一个示例的SQL查询:
```sql
SELECT c.课程编号, c.课程名称, COUNT(s.学号) as 选课人数
FROM grade g
JOIN curriculum c ON g.课程编号 = c.课程编号
JOIN student_info s ON g.学号 = s.学号
GROUP BY c.课程编号, c.课程名称
HAVING COUNT(s.学号) >= 3;
```
这个查询的工作原理是:
1. 使用`JOIN`操作将三个表联接起来。
2. `GROUP BY`按照课程编号和课程名称分组,每个组合对应一个课程的不同版本。
3. `COUNT(s.学号)`计算每个课程有多少学生选修。
4. `HAVING COUNT(s.学号) >= 3`条件筛选出选修人数达到3及以上的课程。
相关问题
基于 student_info 表、curriculum 表和 grade 表,建立一个名为 v_stu_g 的视图,视图包括所有学生的学号、姓名、课程名称、分数。使用视图v_stu_g 查询学号为 0001 的学生的课程平均分
首先,我们需要连接三个表,然后选取学号、姓名、课程名称和分数四个字段,命名为 v_stu_g 视图:
```
CREATE VIEW v_stu_g AS
SELECT student_info.student_id, student_info.name, curriculum.course_name, grade.score
FROM student_info
JOIN grade ON student_info.student_id = grade.student_id
JOIN curriculum ON grade.course_id = curriculum.course_id;
```
接下来,我们可以使用下面的 SQL 查询语句来查询学号为 0001 的学生的课程平均分:
```
SELECT AVG(score)
FROM v_stu_g
WHERE student_id = '0001';
```
这条 SQL 查询语句会从 v_stu_g 视图中选取学号为 0001 的学生的所有分数,然后计算平均分。
基于 student_info 表、curriculum 表和 grade 表建立一个名为v_stu_g的视图,视图 包据所有学生的学号、姓名、课程名称、分数。使用视图 v_stu_g查询学号为 0001的学生的课程平均分。
首先,我们需要创建一个名为 `v_stu_g` 的视图,这个视图将基于 `student_info`, `curriculum`, 和 `grade` 这三个表。假设 `student_info` 表包含学生信息(如学号 `student_id` 和姓名 `name`),`curriculum` 表包含了课程信息(如课程ID `course_id` 和课程名称 `course_name`),而 `grade` 表记录了每个学生的课程成绩(包括 `student_id`, `course_id`, 和 `score`)。视图的SQL创建语句可能如下:
```sql
CREATE VIEW v_stu_g AS
SELECT si.student_id, si.name, c.course_name, AVG(g.score) as avg_score
FROM student_info si
JOIN curriculum c ON si.student_id = c.student_id
JOIN grade g ON si.student_id = g.student_id
GROUP BY si.student_id, si.name, c.course_name
```
现在我们有了视图 `v_stu_g`,可以查询学号为 `0001` 的学生的所有课程的平均分数:
```sql
SELECT avg_score
FROM v_stu_g
WHERE student_id = '0001';
```
阅读全文