sql查询相关

时间:2011-08-09 16:53:14

标签: sql

您好我有一张带有以下记录的“学生”表

INSERT into Student(studId,name)
Values(1,A)
values(2,B)
values(3,C)
values(4,D)

我有一个带有以下记录的“部门”表

INSERT into dept(deptId,Deptname,Emp Id)
Values(D1,Phy,1)
values(D2,Maths,2)
values(D3,Geo,3)

我如何找到不属于任何部门的学生,即在这种情况下,结果应为“D”。 我知道左外连接将返回学生表中的所有记录,但我只想获得1条记录,即学生“D”。

4 个答案:

答案 0 :(得分:3)

SELECT  *
FROM    Student
WHERE   studId NOT IN (SELECT EmpId FROM dept)

查找Student.studId列中尚不存在的所有dept.EmptId条目作为条目。 (假设我正确读了你的桌子)


理想情况下,你应该突破“学生”和“部门”并创建一个连接表(可能称为)“Student_Department”,它链接每个表的键。

+--------------+       +--------------------+        +--------------+
| Student      |       | Student_Department |        | Dept         |
|--------------|       |--------------------|        |--------------|
| studId       | <-----| studId             |    .-> | deptId       |
| name         |       | deptId             | --'    | name         |
| ...          |       +--------------------+        | ...          |
+--------------+                                     +--------------+

这使您只需要定义一个学生和部门,但可以将一个学生分配到多个部门,一个部门分配给多个学生,或者任何组合。

答案 1 :(得分:1)

的伪代码:

select *
from students
where id not in(select a.id from students a 
                inner join department b where b.id in('D1','D2','D3'))

答案 2 :(得分:1)

虽然我同意一些评论者认为这听起来像是一个家庭作业问题,但我会回答一个问题......

  

我知道左外连接将返回学生表中的所有记录,但我只想获得1条记录,即学生“D”。

好的,假设您运行以下查询:

SELECT * FROM Student
LEFT OUTER JOIN dept ON Student.studId = dept.EmpId

你会得到结果:

studId    name    deptId    deptName   EmpId
1         A       D1        Phy        1
2         B       D2        Maths      2
3         C       D3        Geo        3
4         D       NULL      NULL       NULL

您可以在此查询中添加WHERE子句,仅过滤掉您想要的数据吗? :)

答案 3 :(得分:0)

SELECT s.name
FROM Student s
LEFT JOIN Dept d ON d.empId = s.studId
WHERE d.empId IS NULL