EXISTS子句在SQL Server中如何工作?

阿迪亚

我尝试了以下查询EXISTS,但子句的工作有些困惑,尽管我知道它的计算结果为TRUE/FALSE

在#1以下的SQL子查询中,无论如何都会返回0,但组合查询的结果仍为1。

1. SELECT 1 WHERE EXISTS ( SELECT 0 WHERE 1 = 1 )

2. SELECT 1 WHERE EXISTS ( SELECT 0 WHERE 1 = 0 )

另外,如果EXISTS子句求值为TRUE/FALSE,那么为什么以下一项不起作用?

SELECT 1 WHERE EXISTS ( 1 )

请帮助我了解这种情况。

编辑: EXISTS子句的值为TRUE/FALSE条件是TRUE子查询是否返回任何结果。那为什么EXISTS ( 1 )不起作用?这是一个TRUE条件。

卢卡斯·索兹达(Lukasz Szozda)

从技术文档EXISTS

指定一个子查询以测试是否存在行。

SELECT 1 
WHERE EXISTS ( SELECT 0 WHERE 1 = 1 )
-- there is row

SELECT 1 
WHERE EXISTS ( SELECT 0 WHERE 1 = 0 )
-- no row returned by subquery

SELECT 1 WHERE EXISTS ( 1 )
-- not even valid query `1` is not subquery

请记住,它检查行而不是值,因此:

SELECT 1 
WHERE EXISTS ( SELECT NULL WHERE 1 = 1 )
-- will return 1

LiveDemo

编辑:

这似乎与“ EXISTS子句的评估结果为TRUE / FALSE”这句话相矛盾?

EXISTS操作员测试是否存在行,然后返回TRUE/FALSE

因此,如果子查询返回:

╔══════════╗     ╔══════════╗     ╔══════════╗     ╔══════════╗
║ subquery ║     ║ subquery ║     ║ subquery ║     ║ subquery ║
╠══════════╣     ╠══════════╣     ╠══════════╣     ╠══════════╣
║ NULL     ║     ║ 1        ║     ║ 0        ║     ║anything  ║
╚══════════╝     ╚══════════╝     ╚══════════╝     ╚══════════╝

然后EXISTS (subquery)-> TRUE

如果子查询返回(无行):

╔══════════╗
║ subquery ║
╚══════════╝

然后EXISTS (subquery)-> FALSE

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL Server 中的 CASE/EXISTS IN WHERE 子句

来自分类Dev

Coalesce如何在SQL Server中工作?

来自分类Dev

EXISTS如何在oracle SQL中工作?

来自分类Dev

NOT EXISTS在SQL中究竟如何工作?

来自分类Dev

SQL Server中的“ IN”子句限制

来自分类Dev

SQL Server中的“ IN”子句限制

来自分类Dev

SQL SERVER中的CASE子句

来自分类Dev

在SQL Server中查询WITH子句

来自分类Dev

sql server 中的 between 子句

来自分类Dev

SQL Server IN子句

来自分类Dev

SQL Server Pivot In子句

来自分类Dev

SQL Server MODEL子句

来自分类Dev

多个活动结果集(MARS)在SQL Server中如何工作?

来自分类Dev

如何获得多列约束以在SQL Server中工作

来自分类Dev

如何计算SQL Server中的夜间工作班次?

来自分类Dev

这个查询在 SQL Server 中如何工作(来自访问)?

来自分类Dev

LINQ中的sql IN子句

来自分类Dev

SQL 中的多个 IN 子句

来自分类Dev

SQL Server With子句递归在查询级别如何在内部工作

来自分类Dev

如何优化SQL Server查询的where子句

来自分类常见问题

SQL Server中的条件WHERE子句

来自分类Dev

无法在SQL Server中创建组子句

来自分类Dev

SQL Server 2012中的条件where子句

来自分类Dev

使用IN子句更新SQL Server中的多行

来自分类Dev

在SQL Server中按count()子句分组

来自分类Dev

SQL Server 变量如何工作?

来自分类Dev

如何在SQL中的SUM子句中使用not in子句

来自分类Dev

在SQL Server中使用IN子句

来自分类Dev

Sql Server - 加入聚合 IN 子句