是一个子查询,它返回没有行,等于NULL?

时间:2015-05-12 17:25:50

标签: sql sql-server select

在SQL Server中,如果子查询中的SELECT语句没有返回任何行,那么子查询的结果是否等于NULL?我做了一些研究,但我不确定。

示例:

IF (SELECT TOP 1 CLMN1 FROM SOMETABLE) IS NOT NULL THEN
   ....

我要求理解上面if语句的行为。

3 个答案:

答案 0 :(得分:8)

看起来答案是肯定的:

 DECLARE @Test TABLE (Id INT)
 INSERT INTO @Test VALUES (1)

 SELECT * FROM @Test WHERE Id = 2
 SELECT CASE WHEN (SELECT * FROM @Test WHERE Id = 2) IS NULL THEN 1 ELSE 0 END
编辑:在你更新了你的问题后,我想我应该补充一下,而不是检查是否有IS NULL行,你应该使用服务器可以更好地优化的以下内容:

IF EXISTS(SELECT * FROM @Test WHERE Id = 2)
BEGIN
   -- Whatever
END 

答案 1 :(得分:4)

NULL表示没有值,例如某行中某列的“框”为空。 NO ROW表示没有行。

答案 2 :(得分:2)

不,z是一个列值,表示给定行的该列的值没有有效值。您的查询必须为该行返回一行以包含NULL列值。

不返回任何行的查询意味着没有行与您在查询中使用的谓词匹配,因此根本没有返回任何数据。

编辑:编辑问题后,我的答案没有解决问题中提到的具体情况。胡安的上述答案确实如此。