SQL关系分部查询

SQL Relational Division query

我有三个表 student(ID, name), takes(ID, course_id), course(course_id, dept_name)。 我想查询dept_name='Comp. Sci.'所有课程的学号和姓名。 我知道我需要使用关系部门。但是我不知道该怎么做。

谁能解释一下我该怎么做?

PS。我今天才开始学习 SQL。

你可以试试下面的逻辑-

SELECT S.ID, S.name 
FROM student S 
INNER JOIN takes T ON S.ID = T.ID
INNER JOIN course C ON T.course_id = C.course_id AND C.dept_name = 'Comp. Sci.'
GROUP BY S.ID, S.name
HAVING COUNT(T.course_id) = (SELECT COUNT(*) FROM course WHERE dept_name = 'Comp. Sci.') 

正如 gordon 所说的关于两次参加同一课程的可能性,我们可以使用下面的 Having 子句-

HAVING COUNT(DISTINCT T.course_id) = (SELECT COUNT(*) FROM course WHERE dept_name = 'Comp. Sci.') 

只需加入所有表并给出Where条件

`select S.ID,S.name from student s inner join takes t on s.ID = t.ID inner join course c on t.course_id = c.course_id where c.dept_name = 'Comp. Sci.'`