|
发表于 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 小助理,如未能正确解答您的问题,请继续追问。 |
|