我见过很多关于以下内容的查询.
Select 1
From table
Run Code Online (Sandbox Code Playgroud)
这是什么1
意思,它将如何执行,它将返回什么?
此外,在什么类型的场景中,可以使用它吗?
cwa*_*ole 94
SELECT 1 FROM TABLE_NAME
表示"从表中返回1".它本身非常不起眼,所以通常会与它一起使用WHERE
并且经常使用EXISTS
(正如@gbn所说,这不一定是最佳实践,但是,它很常见,即使它没有真正意义(那说,我会用它,因为其他人使用它,它立即"更明显".当然,这可能是一个粘稠的鸡与鸡蛋问题,但我一般不会住)).
SELECT * FROM TABLE1 T1 WHERE EXISTS (
SELECT 1 FROM TABLE2 T2 WHERE T1.ID= T2.ID
);
Run Code Online (Sandbox Code Playgroud)
基本上,上面的内容将返回表1中的所有内容,表1中有相应的ID.(这显然是一个人为的例子,但我相信它传达了这个想法.就个人而言,我可能会SELECT * FROM TABLE1 T1 WHERE ID IN (SELECT ID FROM TABLE2);
按照我认为的那样做FAR对读者更明确,除非有令人信服的理由不这样做.
实际上有一个案例我直到现在才忘记了.在您尝试从外部语言确定数据库中存在值的情况下,有时SELECT 1 FROM TABLE_NAME
会使用.这并没有提供比选择单个列更大的好处,但是,根据实现,它可以提供相当大的收益SELECT *
,因为通常情况下,DB返回到语言的列越多,数据越大结构,这反过来意味着将采取更多的时间.
Sah*_*hoo 87
select 1 from table
将为表的每一行返回常量1.当您想要便宜地确定记录是否符合您的where
条款和/或时,它非常有用join
.
gbn*_*gbn 38
如果你的意思是
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1 FROM table WHERE...)
Run Code Online (Sandbox Code Playgroud)
然后这是一个神话,它1
比...更好
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT * FROM table WHERE...)
Run Code Online (Sandbox Code Playgroud)
忽略EXISTS中的1
或者*
您可以按照ANSI SQL 1992标准的第191页编写它:
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1/0 FROM table WHERE...)
Run Code Online (Sandbox Code Playgroud)
Nev*_*uyt 20
它完成它所说的 - 它将始终返回整数1.它用于检查是否存在与where子句匹配的记录.
Tom*_*Tom 18
select 1 from table
某些数据库使用某些数据库作为查询来测试连接以查看它是否处于活动状态,通常在检索或返回与连接池的连接时使用.
虽然它并不广为人知,但查询可以有一个HAVING
没有GROUP BY
子句的子句.
在这种情况下,该HAVING
子句适用于整个集合.显然,该SELECT
子句不能引用任何列,否则你会(正确)得到错误,"列在select中无效,因为它不包含在GROUP BY中"等.
因此,必须使用文字值(因为SQL不允许结果集为零列 - 为什么?!)并且INTEGER
通常使用文字值1():如果HAVING
子句计算,TRUE
则结果集将是一行,其中一行列显示值1,否则获得空集.
示例:查找列是否具有多个不同的值:
SELECT 1
FROM tableA
HAVING MIN(colA) < MAX(colA);
Run Code Online (Sandbox Code Playgroud)
具体来说,您可以使用此方法
SELECT 1 FROM MyUserTable WHERE user_id = 33487
Run Code Online (Sandbox Code Playgroud)
而不是做
SELECT * FROM MyUserTable WHERE user_id = 33487
Run Code Online (Sandbox Code Playgroud)
因为您不在乎查看结果。对于数据库,要求数字1非常容易(因为它不需要进行任何查找)。
如果您不知道表中是否存在任何数据,可以使用以下查询:
SELECT cons_value FROM table_name;
Run Code Online (Sandbox Code Playgroud)
例如:
SELECT 1 FROM employee;
Run Code Online (Sandbox Code Playgroud)
因此,我们使用此SQL查询来了解表中是否有任何数据,行数表示此表中存在多少行.
归档时间: |
|
查看次数: |
221368 次 |
最近记录: |