我读了一些文章,但真的不明白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
时,结果是什么?
答案 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 table
将SELECT
(返回)该表中的每一行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)
- 如果符合EXISTS
,CONDITIONS
条件将返回true。其他错误。
NOT EXISTS(SELECT CCOUNT 1 FROM TABLE_NAME WHERE CONDITIONS)
- 如果符合NOT EXISTS
,CONDITIONS
条件将返回false。其他是真的。