做个开心的码农 发表于 2024-11-1 10:31:52

数据库

1、使用并运算查询数据库成绩小于70分或数学成绩大于80分的学生的学号。

2、使用交运算查询至少有一门课程成绩在80以上的女生的学号。

3、使用差运算查询没有选修003号课程的学生学号。

4、查询所有学生的成绩信息,列出学号、姓名、课程名和成绩,要求结果包括没有选修任何课程的学生信息。

5、查询每门课程的平均成绩和选课人数,列出课程号、平均成绩和选课人数,对于没有学生选修的课程,平均成绩为NULL,选课人数为0。

6、查询各门课程及格以上的学生人数,列出课程号和及格以上学生人数,对于没有学生选修或选课学生都不及格的课程,学生人数设置为 0。

7、用命令方式创建计算机系学生的视图V_CS_Student,列出学号、姓名、性别、年龄、院系;并要求进行修改和插入操作时仍需保证该视图只有计算机系的学生。

8、通过图形界面创建所有的成绩不及格的学生的信息视图V_Student_Score_Info,列出学号、姓名、年龄、院系、课程名、成绩,并按成绩降序排列。

9、用命令方式创建所有课程的平均成绩V_Scores,列出课程号、课程名、平均成绩。

10、利用视图V_CS_Student,查询计算机系学生的数据库原理课程的成绩,列出学号和成绩。

11、利用视图V_CS _Student,添加一个计算机系的学生,其他信息任意。

12、利用视图V_CS _Student,添加一个信息工程系的学生,观察是否能够成功。

13、利用视图V_CS _Student,把计算机系的学生年龄增加1岁。

FishC 发表于 2024-11-1 10:32:11

为了回答这些问题,我们需要假设一个数据库结构。假设我们有以下几张表:

- `Students` 表:包含学生的基本信息(学号、姓名、性别、年龄、院系)。
- `Scores` 表:包含学生的成绩信息(学号、课程号、成绩)。
- `Courses` 表:包含课程的信息(课程号、课程名)。

以下是每个问题的解决方案:

1. **并运算查询**:使用 `UNION` 查询成绩小于70分或数学成绩大于80分的学生的学号。
   SELECT student_id FROM Scores WHERE score < 70
   UNION
   SELECT student_id FROM Scores WHERE course_id = 'math' AND score > 80;

2. **交运算查询**:使用 `INTERSECT` 查询至少有一门课程成绩在80以上的女生的学号。
   SELECT student_id FROM Students WHERE gender = 'female'
   INTERSECT
   SELECT student_id FROM Scores WHERE score > 80;

3. **差运算查询**:使用 `EXCEPT` 查询没有选修003号课程的学生学号。
   SELECT student_id FROM Students
   EXCEPT
   SELECT student_id FROM Scores WHERE course_id = '003';

4. **查询所有学生的成绩信息**:使用 `LEFT JOIN` 包括没有选修任何课程的学生信息。
   SELECT s.student_id, s.name, c.course_name, sc.score
   FROM Students s
   LEFT JOIN Scores sc ON s.student_id = sc.student_id
   LEFT JOIN Courses c ON sc.course_id = c.course_id;

5. **查询每门课程的平均成绩和选课人数**:
   SELECT c.course_id, AVG(sc.score) AS average_score, COUNT(sc.student_id) AS student_count
   FROM Courses c
   LEFT JOIN Scores sc ON c.course_id = sc.course_id
   GROUP BY c.course_id;

6. **查询各门课程及格以上的学生人数**:
   SELECT c.course_id, COUNT(sc.student_id) AS passing_students
   FROM Courses c
   LEFT JOIN Scores sc ON c.course_id = sc.course_id AND sc.score >= 60
   GROUP BY c.course_id;

7. **创建计算机系学生的视图**:
   CREATE VIEW V_CS_Student AS
   SELECT student_id, name, gender, age, department
   FROM Students
   WHERE department = '计算机系'
   WITH CHECK OPTION;

8. **创建不及格学生的信息视图**:通过图形界面创建,无法用SQL展示。

9. **创建所有课程的平均成绩视图**:
   CREATE VIEW V_Scores AS
   SELECT c.course_id, c.course_name, AVG(sc.score) AS average_score
   FROM Courses c
   LEFT JOIN Scores sc ON c.course_id = sc.course_id
   GROUP BY c.course_id;

10. **查询计算机系学生的数据库原理课程的成绩**:
    SELECT v.student_id, sc.score
    FROM V_CS_Student v
    JOIN Scores sc ON v.student_id = sc.student_id
    WHERE sc.course_id = '数据库原理';

11. **添加一个计算机系的学生**:
    INSERT INTO V_CS_Student (student_id, name, gender, age, department)
    VALUES ('new_id', '新学生', 'M', 20, '计算机系');

12. **尝试添加信息工程系的学生**:由于 `WITH CHECK OPTION`,此操作将失败。

13. **把计算机系的学生年龄增加1岁**:
    UPDATE V_CS_Student
    SET age = age + 1;

这些SQL语句假设了一个简单的数据库结构,具体实现可能需要根据实际的数据库设计进行调整。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 数据库