假设您的数据库中有以下三张表:
- `student` 表,包含学生信息,其中 `id` 是学生的唯一标识符,`name` 是学生姓名。
- `course` 表,包含课程信息,其中 `id` 是课程的唯一标识符,`name` 是课程名称。
- `score` 表,包含学生成绩信息,其中 `student_id` 和 `course_id` 分别是学生和课程的唯一标识符,`score` 是学生在该门课程中的成绩。
则可以使用如下 SQL 语句查询同时选修了“操作系统”课程和“数据库原理”课程的学生名单:
```
SELECT s.name
FROM student s
JOIN score sc1 ON s.id = sc1.student_id
JOIN course c1 ON sc1.course_id = c1.id AND c1.name = '操作系统'
JOIN score sc2 ON s.id = sc2.student_id
JOIN course c2 ON sc2.course_id = c2.id AND c2.name = '数据库原理'
WHERE sc1.score IS NOT NULL AND sc2.score IS NOT NULL;
```
以上 SQL 语句中,通过 `JOIN` 关键字将四个表连接起来,筛选出同时选修了“操作系统”课程和“数据库原理”课程的学生,并返回他们的姓名。其中,`AND` 关键字用于同时限制两个 `JOIN` 子句中的课程名称,`IS NOT NULL` 则用于排除没有成绩记录的学生。