我有以下sql结构
Department: id, name
Students: id,name
department_students: student_id, department_id
查找学生人数超过 10 人的所有部门
查找所有不在技术部门的学生
我怎么能用 join 来得到这个?
对可怕的压痕感到抱歉
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
首先,您需要将表连接在一起。部门到 Department_students,然后是 Student 到 Department_Students。然后在 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”。部门 id 到 department_students,然后学生 id 到 department_students。