本题目要求编写SQL语句, 检索出所有选修'C语言'课程的学生成绩记录,输出结果集按照成绩降序排序。 分别尝试用以下几种方式实现。 1)采用连接查询 2)采用嵌套查询 3)采用EXIST查询
时间: 2024-11-04 08:16:33 浏览: 24
用SQL语句进行数据库查询(复杂查询)
为了完成这个任务,我们可以使用SQL的不同查询方式来获取满足条件的结果。以下是三种方法的示例:
1)**采用连接查询 (JOIN)**:
```sql
SELECT students.name, scores.score
FROM students
INNER JOIN enrollments ON students.id = enrollments.student_id
INNER JOIN courses ON enrollments.course_id = courses.id
WHERE courses.name = 'C语言'
ORDER BY scores.score DESC;
```
在这个查询中,我们首先将`students`、`enrollments`和`courses`表通过学生的ID和课程ID关联起来,然后筛选出"C语言"课程的学生,并按成绩降序排列。
2)**采用嵌套查询 (Subquery)**:
```sql
SELECT s.name, sc.score
FROM students s
JOIN (
SELECT student_id, score
FROM scores
WHERE course_name = 'C语言'
) sc ON s.id = sc.student_id
ORDER BY sc.score DESC;
```
这里先创建了一个子查询,找出"C语言"的所有成绩,然后再把这些成绩与学生表关联,并按成绩排序。
3)**采用EXISTS查询 (Exists Subquery)**:
```sql
SELECT s.name, sc.score
FROM students s
JOIN scores sc ON s.id = sc.student_id
WHERE EXISTS (SELECT * FROM courses WHERE courses.name = 'C语言' AND sc.course_id = courses.id)
ORDER BY sc.score DESC;
```
这种方法利用了EXISTS关键字,判断是否存在'C语言'课程的成绩记录,如果存在,则返回该学生的名和成绩,并按成绩排序。
阅读全文