对连接感到困惑

时间:2013-02-14 17:26:50

标签: sql join

我有以下sql结构

Department: id, name
Students: id,name
department_students: student_id, department_id

查找超过10名学生的所有部门

查找所有不在技术部门的学生

我如何使用join来获取此信息?

2 个答案:

答案 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