我看到过很多这样的问题。
Select 1
From table
这个1是什么意思,它将如何执行,它将返回什么?
另外,在什么类型的场景中可以使用它?
我看到过很多这样的问题。
Select 1
From table
这个1是什么意思,它将如何执行,它将返回什么?
另外,在什么类型的场景中可以使用它?
当前回答
它做了它所说的——它总是返回整数1。它用于检查是否存在与where子句匹配的记录。
其他回答
它做了它所说的——它总是返回整数1。它用于检查是否存在与where子句匹配的记录。
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中与表2中的ID相对应的所有内容。(显然,这是一个人为的例子,但我相信它传达了这个想法。就我个人而言,我可能会这样做:SELECT * FROM TABLE1 T1 WHERE ID IN (SELECT ID FROM TABLE2);因为我认为这对读者来说要明确得多,除非有令人信服的理由不这样做)。
EDIT
There actually is one case which I forgot about until just now. In the case where you are trying to determine existence of a value in the database from an outside language, sometimes SELECT 1 FROM TABLE_NAME will be used. This does not offer significant benefit over selecting an individual column, but, depending on implementation, it may offer substantial gains over doing a SELECT *, simply because it is often the case that the more columns that the DB returns to a language, the larger the data structure, which in turn mean that more time will be taken.
更具体地说,您将使用这个来做
SELECT 1 FROM MyUserTable WHERE user_id = 33487
而不是做
SELECT * FROM MyUserTable WHERE user_id = 33487
因为你不关心结果。对于数据库来说,请求数字1非常容易(因为它不需要进行任何查找)。
如果你的意思是
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1 FROM table WHERE...)
那么1优于
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT * FROM table WHERE...)
EXISTS中的1或*被忽略,你可以按照ANSI SQL 1992标准的第191页写:
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1/0 FROM table WHERE...)
如果你不知道你的表中是否存在任何数据,你可以使用以下查询:
SELECT cons_value FROM table_name;
例如:
SELECT 1 FROM employee;
它将返回一个包含行总数的列,并且所有行都具有相同的常量值1(这次它为所有行返回1); 如果表中没有行,它将不返回任何内容。
因此,我们使用这个SQL查询来知道表中是否有任何数据&行数表示这个表中有多少行。