我看到很多查询的内容如下。
Select 1
From table
这个1
意味着什么,它将如何执行以及它将返回什么?
此外,在什么类型的场景中,可以使用它吗?
答案 0 :(得分:90)
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
);
基本上,上面将返回表1中的所有内容,表1中有相应的ID。(这显然是一个人为的例子,但我相信它传达了这个想法。就个人而言,我可能会做上面的{{{ 1}}因为我认为 FAR 对读者更明确,除非有一个令人信服的理由不这样做。)
实际上有一个案例我直到现在才忘记了。如果您尝试使用外部语言确定数据库中是否存在值,则有时会使用SELECT * FROM TABLE1 T1 WHERE ID IN (SELECT ID FROM TABLE2);
。这并不比选择单个列提供显着的好处,但是,根据实现,它可能比执行SELECT 1 FROM TABLE_NAME
提供大量收益,因为通常情况下,DB返回到一种语言的列越多,数据结构越大,这反过来意味着将花费更多的时间。
答案 1 :(得分:72)
select 1 from table
将为表的每一行返回常量1。当您想要便宜地确定记录是否与您的where
条款和/或join
匹配时,此功能非常有用。
答案 2 :(得分:36)
如果你的意思是
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1 FROM table WHERE...)
然后是神话,1
优于
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT * FROM table WHERE...)
EXISTS中的1
或*
会被忽略,您可以按Page 191 of the ANSI SQL 1992 Standard编写:
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1/0 FROM table WHERE...)
答案 3 :(得分:18)
它完成它所说的 - 它将始终返回整数1.它用于检查是否存在与where子句匹配的记录。
答案 4 :(得分:17)
select 1 from table
作为查询来测试连接是否存在,通常在检索或返回与连接池的连接时使用。
答案 5 :(得分:12)
答案 6 :(得分:9)
虽然它并不广为人知,但查询可以包含HAVING
子句而不包含GROUP BY
子句。
在这种情况下,HAVING
子句将应用于整个集合。显然,SELECT
子句不能引用任何列,否则你会(正确)得到错误,“列在select中无效,因为它不包含在GROUP BY中”等。
因此,必须使用文字值(因为SQL不允许结果集为零列 - 为什么?!)和文字值1(INTEGER
)通常used:如果HAVING
子句评估TRUE
,则结果集将是一行,其中一列显示值1,否则您将获得空集。
示例:查找列是否具有多个不同的值:
SELECT 1
FROM tableA
HAVING MIN(colA) < MAX(colA);
答案 7 :(得分:6)
稍微具体一点,你可以用它来做
SELECT 1 FROM MyUserTable WHERE user_id = 33487
而不是
SELECT * FROM MyUserTable WHERE user_id = 33487
因为你不关心看结果。要求数字1对于数据库来说非常容易(因为它不需要进行任何查找)。
答案 8 :(得分:5)
如果您不知道表中是否存在任何数据,可以使用以下查询:
SELECT cons_value FROM table_name;
例如:
SELECT 1 FROM employee;
因此,我们使用此SQL查询来了解表格中是否有任何数据。行数表示此表中存在多少行。
答案 9 :(得分:3)
这意味着您需要将值“ 1 ”作为输出或大部分时间用作内部查询,因为出于某种原因,您希望根据内部查询的结果计算外部查询。 。并非所有时间都使用 1 但你有一些特定的价值......
这将静态地将输出作为值1。
答案 10 :(得分:3)
如果您只想根据WHERE子句检查true或false,请从表中选择1,其中condition是最便宜的方式。
答案 11 :(得分:2)
我发现它总是在SQL注入中使用,例如:
www.urlxxxxx.com/xxxx.asp?id=99 union select 1,2,3,4,5,6,7,8,9 from database;
这些数字可用于猜测数据库的存在位置,并猜测您指定的数据库的列名。以及表的值。
答案 12 :(得分:0)
它很简单就意味着你要从表中找到第一列的数字,,,,表示 从员工中选择Emply_num,Empl_no; 在这里你使用的是员工中的精选1; 这意味着您正在检索Emply_num列。 感谢
答案 13 :(得分:0)
原因是另一个,至少对MySQL来说。这来自MySQL manual
InnoDB在启动后第一次访问该表时计算表的索引基数值,而不是在表中存储这些值。对于将数据分区为多个表的系统,此步骤可能会花费大量时间。由于此开销仅适用于初始表打开操作,要“预热”表以供以后使用,请在启动后立即通过发出SELECT 1 FROM tbl_name LIMIT 1
等语句来访问它。
答案 14 :(得分:0)
这只是为了方便IF EXISTS()使用。否则,您可以使用
select * from [table_name]
Image对于'IF EXISTS',我们只需要知道具有指定条件的任何行是否存在都无关紧要。
select 1 from Users
上面的示例代码,返回否。行数等于否。一栏中有1个用户的