
答案
要查询没学过"人工智能"课程的学生学号,我们可以通过两个步骤实现:
找出所有学过"人工智能"课程的学生的学号。
从学生关系中减去这些学号。
给定的关系模式为:
学生(学号,姓名,系)
课程(课程号,课程名,学分)
选课(学号,课程号,成绩)
我们可以使用以下的SQL查询来完成这个任务:
sql
复制
SELECT 学号
FROM 学生
WHERE 学号 NOT IN (
SELECT 学号
FROM 选课
JOIN 课程 ON 课程号 = 课程.课程号
WHERE 课程名 = '人工智能'
);
这个SQL查询首先通过JOIN和WHERE子句找出所有学过"人工智能"课程的学生学号。然后,使用NOT IN子句从学生关系中排除这些学号。查询结果就是所有没学过"人工智能"课程的学生学号。
在关系代数中,这个操作可以看作是先做一个选择(选择出所有学过"人工智能"课程的学生学号),然后做一个差运算(从学生关系中减去这些学号)。因此,我们可以认为这个操作使用了关系代数中的选择、差运算和投影操作。
π学号(学生)–π学号(σ课程名='人工智能' (选课⋈课程))