“从中选择1有什么作用?

问题描述 投票:54回答:5

我读了一些文章,但真的不明白select 1 from是做什么的?有人说“您应该使用而不是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

我写select 1 from customer_table时,该语句的作用是什么?

sql-server-2008
5个回答
49
投票
select 1 from table

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

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

您的朋友可能说的是,与其使用表中的* *进行批量选择,您应该精确地指定所需的列,这有两个原因:

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

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


25
投票

该结构通常用于“存在”检查中

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

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

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


19
投票

它按照您的要求,如果表中有3行,SELECT 1 FROM table将为该表中的每一行SELECT(返回)一个1

1
1
1

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


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

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 EXISTSCONDITIONS条件将始终返回false。

SELECT COUNT 1 in EXISTS/NOT EXISTS

EXISTS(SELECT CCOUNT 1 FROM TABLE_NAME WHERE CONDITIONS)-如果满足EXISTS,则CONDITIONS条件将返回true。否则为假。

NOT EXISTS(SELECT CCOUNT 1 FROM TABLE_NAME WHERE CONDITIONS)-如果满足NOT EXISTS,则CONDITIONS条件将返回false。否则,是。

© www.soinside.com 2019 - 2024. All rights reserved.