建立 2010 年以来各门课程不及格学生的视图,按课程列出课程号,课程名,课程段,任课老师,学期,学年,学生学号,学生姓名及其成绩。
时间: 2023-10-08 07:13:20 浏览: 211
假设数据库中有以下表格:
- Course (课程信息表):包含课程号(cno)、课程名(cname)、课程段(csegment)、任课老师(cteacher)等字段。
- Student (学生信息表):包含学号(sno)、姓名(sname)等字段。
- Score (成绩表):包含课程号(cno)、学生号(sno)、学期(term)、学年(year)、成绩(score)等字段。
则可以使用以下 SQL 语句建立视图:
```
CREATE VIEW FailStudents AS
SELECT C.cno, C.cname, C.csegment, C.cteacher, S.term, S.year, S.sno, S.sname, SC.score
FROM Course C, Student S, Score SC
WHERE C.cno = SC.cno AND S.sno = SC.sno AND SC.score < 60 AND S.year >= 2010
ORDER BY C.cno, S.sno;
```
这个视图将包含 2010 年以来各门课程不及格学生的信息,按照课程号和学生号排序。您可以根据需要进行调整和修改。
相关问题
查询各门课程及格以上的学生人数,列出课程号和及格以上学生人数, --对于没有学生选修或选课学生都不及格的课程,学生人数设置为 0。
为了获取各门课程及格以上的学生人数,我们需要首先计算每门课程的合格人数,然后在结果中设置不及格课程的学生人数为0。这通常涉及到两个步骤:首先统计每门课程的总人数,然后筛选出及格的学生数。假设我们有students和grades表,可以这样做:
```sql
WITH course_grades AS (
SELECT c.course_id, COUNT(s.student_id) AS total_students, SUM(CASE WHEN g.grade >= '及格' THEN 1 ELSE 0 END) AS passing_students
FROM courses c
LEFT JOIN students s ON c.course_id = s.course_id
LEFT JOIN grades g ON s.student_id = g.student_id
GROUP BY c.course_id
),
course_counts AS (
SELECT cg.course_id, cg.total_students, COALESCE(cg.passing_students, 0) AS passing_students
FROM course_grades cg
)
SELECT * FROM course_counts WHERE passing_students > 0;
```
这个查询首先创建了一个名为`course_grades`的临时视图,用于计算每个课程的总学生数和及格学生数。然后,在`course_counts`视图中,使用`COALESCE`函数将不及格课程的`passing_students`设为0。
建立统计不及格情况的视图,列出不及格学生的学号、姓名和不及格的课程代码;
可以使用以下 SQL 语句来建立视图:
```
CREATE VIEW failing_students AS
SELECT s.student_id, s.name, c.course_code
FROM students s
JOIN grades g ON s.student_id = g.student_id
JOIN courses c ON g.course_id = c.course_id
WHERE g.grade < 60;
```
这个视图会列出所有不及格学生的学号、姓名和不及格的课程代码。视图的结构是固定的,不能插入、更新或删除记录。但是,可以对视图进行查询,就像对表进行查询一样。
注意:这个视图假设你有 students 表,courses 表和 grades 表。在 students 表中,有 student_id 和 name 两列;在 courses 表中,有 course_id 和 course_code 两列;在 grades 表中,有 student_id、course_id 和 grade 三列。
阅读全文