从表中选择1是什么意思?

时间:2011-08-24 05:55:24

标签: mysql sql plsql

我看到很多查询的内容如下。

Select 1  
From table

这个1意味着什么,它将如何执行以及它将返回什么?

此外,在什么类型的场景中,可以使用它吗?

15 个答案:

答案 0 :(得分:90)

SELECT 1 FROM TABLE_NAME表示“从表中返回1”。它本身非常不起眼,所以通常它会与WHEREEXISTS一起使用(正如@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)

对于表格中的每条记录,结果为1__

答案 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;
  1. 它将返回一个包含总行数和列数的列。所有行都具有相同的常量值1(此时它为所有行返回1);
  2. 如果表格中没有任何行,则不会返回任何内容。
  3. 因此,我们使用此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个用户的