NOT IN vs NOT EXISTS并选择1 1?

时间:2014-05-29 00:34:46

标签: sql sql-server exists not-exists

我是一名初学者,我完全了解NOT IN所做的事情,但实际上并不是EXISTSNOT EXISTS。 更重要的是,我不明白这是做什么的:

SELECT TOP 1 1 
FROM tblSomeTable

这个查询实际上做了什么?

作为参考,我一直在做这样的事情:

SELECT COUNT(E_ID)
FROM  tblEmployee e    
INNER JOIN  tblManager m 
      ON e.tbl_ID = m.tbl_ID         
WHERE NOT EXISTS(SELECT TOP 1 1 
                   FROM tblEmployee e2 
                   WHERE e2.E_ID = e.E_ID 
                       AND isFired = 'N'
                   )

我想我还没有看过/看过一个对我来说有意义的外行解释。即使在阅读Diff between Top 1 1 and Select 1 in SQL Select Query后我仍然没有得到它

3 个答案:

答案 0 :(得分:1)

我认为实际上需要回答的问题是EXISTS (SELECT TOP 1 1 FROM MyTable)是否真的有必要。

Top 1 1告诉查询为任何答案选择常量“1”。

Top 1部分告诉它在找到匹配后立即停止并返回“1”。

EXISTS (SELECT TOP 1 FROM MyTable)不足够吗?

答案 1 :(得分:0)

您的第一个查询将只获得结果集中总行数中的最高记录(非常第一条记录)。因此,如果您的查询返回10行..您将获得第一行。详细了解TOP

SELECT TOP 1 FROM tblSomeTable

在第二个查询中,()下的部分是一个子查询,在您的情况下,它是一个相关子查询,对于外部查询处理的每一行,它将被评估一次。

NOT EXISTS实际上会检查子查询中存在的行是否存在

WHERE NOT EXISTS
(
SELECT TOP 1 1 FROM tblEmployee e2 WHERE e2.E_ID = e.E_ID AND isFired = 'N'
)

详细了解Correlated subquery以及Subqueries with EXISTS

答案 2 :(得分:0)

SELECT TOP 1 1 FROM <table>将返回第一行,其值始终为1,您已将其定义为常量。

因此,如果将其更改为SELECT TOP 1 2 FROM <table>,则会始终将值返回为2。

SQL中INEXISTS运算符之间的区别

请阅读:

http://awesomesql.wordpress.com/2009/07/31/difference-between-in-and-exists-operators-in-sql/