可以使用 INNER JOIN 和 WHERE 子句来查询同时选修了“操作系统”课程和“数据库原理”课程的学生名单。以下是一种可能的 SQL 语句:
```
SELECT students.name
FROM students
INNER JOIN scores AS os_scores ON students.id = os_scores.student_id AND os_scores.course_id = '操作系统'
INNER JOIN scores AS db_scores ON students.id = db_scores.student_id AND db_scores.course_id = '数据库原理';
```
解释一下这个 SQL 语句:
1. 首先在 FROM 子句中列出需要查询的表。
2. 然后使用 INNER JOIN 连接 students 表和 scores 表两次,以便获取同时选修了“操作系统”课程和“数据库原理”课程的学生信息。
3. 在 WHERE 子句中筛选出同时选修了“操作系统”课程和“数据库原理”课程的学生,即 os_scores 表和 db_scores 表中都存在该学生的记录,并且对应的 course_id 分别为'操作系统'和'数据库原理'。
4. 最后使用 SELECT 子句选择符合条件的学生姓名。
需要注意的是,在连接 scores 表时需要使用别名(AS)来区分两次连接,同时在 WHERE 子句中使用 AND 来连接两个条件。