我正在使用SQL Server 2008 R2
我只想测试一下表中是否存在某种东西
IF EXISTS (SELECT * FROM ta WHERE ca = 'abc') PRINT 'YES' IF EXISTS (SELECT ca FROM ta WHERE ca = 'abc') PRINT 'YES' IF EXISTS (SELECT 1 FROM ta WHERE ca = 'abc') PRINT 'YES' IF EXISTS (SELECT (1) FROM ta WHERE ca = 'abc') PRINT 'YES' IF EXISTS (SELECT TOP 1 1 FROM ta WHERE ca = 'abc') PRINT 'YES'他们在结果/副作用/表现(无论多么微小)方面有任何差异吗?
谢谢
I am using SQL Server 2008 R2
I just want to test if something exists in a table
IF EXISTS (SELECT * FROM ta WHERE ca = 'abc') PRINT 'YES' IF EXISTS (SELECT ca FROM ta WHERE ca = 'abc') PRINT 'YES' IF EXISTS (SELECT 1 FROM ta WHERE ca = 'abc') PRINT 'YES' IF EXISTS (SELECT (1) FROM ta WHERE ca = 'abc') PRINT 'YES' IF EXISTS (SELECT TOP 1 1 FROM ta WHERE ca = 'abc') PRINT 'YES'Do they have any differences in result/side effect/performance (no matter how tiny)?
Thank you
最满意答案
绝对没有区别 - IF EXISTS(...)只会根据语句中的WHERE子句检查是否存在行。
声明中的其他所有内容都是不相关的 - 无论您使用SELECT *还是SELECT 1或SELECT TOP 1 *都没有任何区别。 即使使用SELECT * ....也不会从表中选择所有列 - 它只是再次检查基于WHERE子句的数据是否存在。
所有五个查询具有完全相同的执行计划
Absolutely no difference - the IF EXISTS(...) will only check for existence of rows based on the WHERE clause in your statement.
Everything else in the statement is irrelevant - doesn't make any difference whether you use SELECT * or SELECT 1 or or SELECT TOP 1 *. Even using SELECT * .... does NOT select all columns from the table - it again just checks for existence of the data based on the WHERE clause.
All five queries have exactly the same execution plan
更多推荐
发布评论