Sql server 2008 “从中选择1”的作用是什么?

Sql server 2008 “从中选择1”的作用是什么?,sql-server-2008,Sql Server 2008,我读了一些文章,但真的不明白select 1的作用是什么?有人说你应该使用select 1而不是select*。下面是一个示例表: cust_id cust_name cust_address 1000000001 Village Toys Mapl 1000000002 Kids Place South 1000000003 Fun4All Sunny 1000000004 Fun4All Riverside 100

我读了一些文章,但真的不明白select 1的作用是什么?有人说你应该使用select 1而不是select*。下面是一个示例表:

cust_id     cust_name       cust_address

1000000001  Village Toys    Mapl
1000000002  Kids Place      South
1000000003  Fun4All         Sunny
1000000004  Fun4All         Riverside
1000000005  The Toy Store   53rd

当我从customer_表中写入select 1时,结果会是什么?该语句的作用是什么?

该结构通常用于存在性检查

if exists(select 1 from customer_table where customer = 'xxx')

这两种结构是等效的。过去人们说select*更好,因为查询调控器会使用索引最好的列。这已被证明是不正确的。

它根据您的要求执行,从表中选择1将为该表中的每一行选择返回1,如果该表中有3行您将得到

1
1
1
请看一下您所描述的问题。

语句SELECT 1 FROM SomeTable只返回一列,其中包含表中每行的值1。如果在中添加另一列,例如从SomeTable中选择1,cust_name,则会更清楚:

            cust_name
----------- ---------------
1           Village Toys
1           Kids Place
1           Fun4All
1           Fun4All
1           The Toy Store
将为表中的每一行返回一列1。您可以将其与where语句一起使用,以检查是否有给定密钥的条目,如中所示:

if exists(select 1 from table where some_column = 'some_value')
您的朋友可能会说,与其使用select*from table进行批量选择,您应该精确地指定所需的列,原因有两个:

1性能&您可能检索到比实际需要更多的数据

2查询的用户可能依赖于列的顺序。如果表得到更新,客户端将以不同于预期的顺序接收列

SELECT COUNT(*) in EXISTS/NOT EXISTS
EXISTS从表_NAME中选择Account*,其中包含条件-无论是否满足条件,EXISTS条件都将始终返回true

SELECT COUNT 1 in EXISTS/NOT EXISTS
不存在从表_NAME中选择Account*,其中的条件-不存在条件将始终返回false,无论是否满足条件

SELECT COUNT 1 in EXISTS/NOT EXISTS
EXISTS从表_NAME中选择帐户1,其中包含条件-如果满足条件,EXISTS条件将返回true。否则就错了


不存在从表_NAME中选择帐户1,其中包含条件-如果满足条件,“不存在”条件将返回false。否则为真。

大约十年前,在EXISTS子句中建议选择1而不是select*,这是合理的建议。优化器在很久以前就得到了改进。它从来都不是从这个结果集中获取所有列的替代品。你尝试过吗???我为什么要这样做?@Imray当你只想知道WHERE子句中的条件是真是假时,这很有用。它经常用于子查询。你能提供一些详细信息吗?事实证明这是错误的。有些人已经做了大量的性能测试来确定差异,但你可以自己做。请参见以下要点作为示例:
SELECT COUNT 1 in EXISTS/NOT EXISTS