我读了一些文章,但真的不明白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
时,该语句的作用是什么?
select 1 from table
将为表中的每一行返回1的列。您可以将其与where语句一起使用,以检查是否有给定键的条目,如:
if exists(select 1 from table where some_column = 'some_value')
您的朋友可能说的是,与其使用表中的* *进行批量选择,您应该精确地指定所需的列,这有两个原因:
1)性能&您可能会检索到比实际需要更多的数据。
2)查询的用户可能依赖于列的顺序。如果您的表得到更新,则客户端将以不同于预期的顺序接收列。
该结构通常用于“存在”检查中
if exists(select 1 from customer_table where customer = 'xxx')
或
if exists(select * from customer_table where customer = 'xxx')
两种构造都是等效的。过去人们说select *更好,因为查询调控器将使用最佳索引列。已经证明这是不正确的。
语句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
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
,CONDITIONS
条件将始终返回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。否则,是。