Sql server 2008 “从中选择1”的作用是什么?
我读了一些文章,但真的不明白select 1的作用是什么?有人说你应该使用select 1而不是select*。下面是一个示例表: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
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