7.查询学过“谌燕”老师所教的所有课的同学的学号、姓名; 8.查询课程编号“c002”的成绩比课程编号“c001”课程低的所有同学的学号、姓名; 9.查询所有课程成绩小于60 分的同学的学号、姓名; 10.查询没有学全所有课的同学的学号、姓名;
时间: 2024-09-27 13:11:22 浏览: 41
好的,以下是针对这些需求的SQL查询:
7. 查询学过“谌燕”老师所教的所有课的同学的学号、姓名:
```sql
SELECT student_id, name
FROM students
JOIN scores ON students.student_id = scores.student_id
WHERE teacher_name = '谌燕';
```
8. 查询课程编号“c002”的成绩比课程编号“c001”课程低的所有同学的学号、姓名:
```sql
SELECT s.student_id, s.name
FROM students s
JOIN scores sc1 ON s.student_id = sc1.student_id AND sc1.course_code = 'c001'
JOIN scores sc2 ON s.student_id = sc2.student_id AND sc2.course_code = 'c002'
WHERE sc1.score > sc2.score;
```
9. 查询所有课程成绩小于60分的同学的学号、姓名:
```sql
SELECT student_id, name
FROM students
JOIN scores ON students.student_id = scores.student_id
WHERE score < 60;
```
10. 查询没有学全所有课的同学的学号、姓名(这里假设每门课都有开设,如果不确定是否学全,可能需要额外条件检查每个学生修了多少门课):
```sql
WITH courses_taken AS (
SELECT student_id, ARRAY_AGG(course_code) AS course_codes
FROM scores
GROUP BY student_id
)
SELECT s.student_id, s.name
FROM students s
LEFT JOIN courses_taken ct ON s.student_id = ct.student_id
WHERE NOT (ct.course_codes @> ARRAY['c001', 'c002', ...]); -- 将这里的课程代号替换为实际的课程列表
```
以上查询同样基于特定的数据表结构,实际应用时可能需要根据具体的数据库设计进行调整。如果你有其他关于数据库操作的问题,也可以随时提问哦。
阅读全文