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.'`
我有三个表 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.'`