用sql语句帮我写为 003号专业的学生选修所有课程名为数据库的课程(跳过已经选修的学生)。
时间: 2024-11-22 13:45:22 浏览: 4
SQL语句创建学生信息数据库表的示例实用文档.doc
假设我们有一个名为`students`的表,用于存储学生的个人信息,包括学生ID (`student_id`) 和专业 (`major`);还有一个名为`courses`的表,包含课程信息,如课程ID (`course_id`)、课程名称 (`course_name`),以及另一个表`enrollments`记录学生的选课情况,字段有`student_id`和`course_id`。
你可以使用以下SQL语句来获取003号专业尚未选修所有叫做"数据库"的课程:
```sql
SELECT c.course_id, c.course_name
FROM courses c
JOIN students s ON c.course_id = (
SELECT course_id
FROM enrollments e
JOIN students se ON e.student_id = se.student_id AND se.major = '003'
WHERE e.student_id NOT IN (
SELECT student_id
FROM enrollments
WHERE course_name = '数据库'
)
)
WHERE s.major = '003' AND c.course_name = '数据库';
```
这个查询首先从`enrollments`表中找出已选修了名为"数据库"课程的学生ID,然后排除这些ID,接着在`courses`表中查找003专业的学生未选修的所有"数据库"课程。
阅读全文