"选择1"是做什么的?

Meh*_*met 57 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
Run Code Online (Sandbox Code Playgroud)

当我写下select 1 from customer_table这句话的内容时,结果会是什么?

Vla*_*mir 52

select 1 from table
Run Code Online (Sandbox Code Playgroud)

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

if exists(select 1 from table where some_column = 'some_value')
Run Code Online (Sandbox Code Playgroud)

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

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

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


Fil*_*Vos 27

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

if exists(select 1 from customer_table where customer = 'xxx')
Run Code Online (Sandbox Code Playgroud)

要么

if exists(select * from customer_table where customer = 'xxx')
Run Code Online (Sandbox Code Playgroud)

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


Ale*_* K. 19

如果表中有3行,你会得到你所要求的,SELECT 1 FROM tableSELECT(返回)a 1表示该表中的每一行

1
1
1
Run Code Online (Sandbox Code Playgroud)

看一下Count(*)vs Count(1),这可能是你所描述的问题.

  • @Imray当您只是想知道WHERE子句中的条件是true还是false时,这很有用。它通常在子查询中使用。 (3认同)
  • 我为什么要那个? (2认同)

Jus*_*tin 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
Run Code Online (Sandbox Code Playgroud)


小智 5

SELECT COUNT(*) in EXISTS/NOT EXISTS
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

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