我看了一些文章,但真的不明白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 table将SELECT(返回)a 1表示该表中的每一行
1
1
1
Run Code Online (Sandbox Code Playgroud)
看一下Count(*)vs Count(1),这可能是你所描述的问题.
该语句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否则是真的。
| 归档时间: |
|
| 查看次数: |
116590 次 |
| 最近记录: |