“选择1”是做什么的?

时间:2011-08-12 12:17:10

标签: sql-server-2008

我读了一些文章,但真的不明白select 1 from做了什么?有人说“你应该使用而不是select *”。这是一个exapmle表:

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

当我写select 1 from customer_table时,结果是什么?

5 个答案:

答案 0 :(得分:46)

select 1 from table

将为表中的每一行返回1的列。您可以将它与where语句一起使用,以检查是否有给定键的条目,如:

if exists(select 1 from table where some_column = 'some_value')

你的朋友可能会说的是,不是使用select * from table进行批量选择,而是应该精确指定所需的列,原因有两个:

1)表现&您可能会检索到比实际需要的数据更多的数据。

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

答案 1 :(得分:24)

施工通常用于“存在”检查

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

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

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

答案 2 :(得分:18)

根据您的要求,SELECT 1 FROM tableSELECT(返回)该表中的每一行1,如果表格中有3行,您将获得

1
1
1

请查看Count(*) vs Count(1),这可能是您所描述的问题。

答案 3 :(得分:7)

语句SELECT 1 FROM SomeTable只返回表中每行包含值1的列。如果您添加其他列,例如SELECT 1, cust_name FROM SomeTable然后它使它更清晰:

            cust_name
----------- ---------------
1           Village Toys
1           Kids Place
1           Fun4All
1           Fun4All
1           The Toy Store

答案 4 :(得分:3)

SELECT COUNT(*) in EXISTS/NOT EXISTS

EXISTS(SELECT CCOUNT(*) FROM TABLE_NAME WHERE CONDITIONS) - EXISTS条件将始终返回true,无论条件是否满足。

NOT EXISTS(SELECT CCOUNT(*) FROM TABLE_NAME WHERE CONDITIONS) - NOT EXISTS条件将始终返回false,无论是否满足CONDITIONS

SELECT COUNT 1 in EXISTS/NOT EXISTS

EXISTS(SELECT CCOUNT 1 FROM TABLE_NAME WHERE CONDITIONS) - 如果符合EXISTSCONDITIONS条件将返回true。其他错误。

NOT EXISTS(SELECT CCOUNT 1 FROM TABLE_NAME WHERE CONDITIONS) - 如果符合NOT EXISTSCONDITIONS条件将返回false。其他是真的。