我有以下sql结构
Department: id, name
Students: id,name
department_students: student_id, department_id
查找超过10名学生的所有部门
查找所有不在技术部门的学生
我如何使用join来获取此信息?
答案 0 :(得分:0)
首先,您需要将表连接在一起。部门到部门_学生然后学生到部门_学生。然后在WHERE子句中进一步定义需要查找的内容。这是“查找所有不在技术部门的学生”的例子
SELECT S.ID, S.Name
FROM department_students AS DS
INNER JOIN Department AS D
ON DS.department_id = D.id
INNER JOIN Students AS S
ON S.ID = DS.student_id
WHERE
D.Name <> 'Tech_Department'
注意:我使用的是MS SQL Server语法。
所以您需要了解的是,您正在将不同的表“加入”具有唯一信息的其他表“ON”字段(即键)。在您的示例中,跨越不同表的唯一信息是“ID”。部门ids对department_students,然后学生ids到department_students。
答案 1 :(得分:0)
抱歉可怕的缩进
select *
from student s
where
not exists
(
select 1
from student_department sd
join department d
on sd.student_id = s.id
and
sd.department_id = d.id
and
d.name = 'tech'
)
select d.name
from department d
join student_department sd
on d.id = sd.department_id
group by sd.department_id
having count(*)>10