-4

如果 emp 表包含 14 行并且当我执行时SELECT 5 FROM EMP为什么它显示以下输出而不是显示错误

5
-----
5
5
5
5
5
5
5
5
5
5
5
5
5
5

为什么它只是将 5 作为列别名并将结果重复行作为数字 5 提供到表的行数。

另一方面,它不起作用

SQL> select something from emp;
select something from emp
       *
ERROR at line 1:
ORA-00904: "SOMETHING": invalid identifier
4

3 回答 3

2

没有错误,因为您选择的是静态值,5并且对表中的每一行都重复此操作。这与使用相同:

select id, 5
from emp

您将返回所有 id,但您还将返回5所有行的值为 的列。它是有效的 SQL,因此不会出现错误。

这只是选择一个常量值作为列,你不会收到错误,因为它是一个数字,如果你想对字符串做同样的事情,你会用单引号将值括起来:

select id, 'something'
from emp

由于您是从表中选择的,因此您将为表中的每一行返回常量值。

如果您将查询更改为从对偶中选择,您将只返回一行,但您的表有 14 行,因此每一行的值都重复。

于 2013-04-11T11:58:06.957 回答
2

select一个或多个表达式,可能是简单的表达式

简单表达式的语法图显示一个数字或另一个固定值是有效的 - 所以您所做的就是5为表中的每一行选择一个常量值 , 。

也许毫无意义,但完全有效。(我通常选择8,输入太快并且输入错误*......)。默认情况下它被别名为"5",因为它必须被称为某些东西;否则这将失败:

 select "5" from (select 5 from dual);

在您的第二个示例中,没有名为 的列something,但是如果您想获得一个常量字符串,那么它将起作用:

 select 'something' from dual;

如果没有引号,something这将是列的有效名称,因此 Oracle 尝试将其解释为该名称并失败,因为没有这样的列。5不是有效的列名(请参阅对象命名规则,以免混淆,它被解释为固定值,而不是列名。

于 2013-04-11T12:06:23.790 回答
0

您选择 14 行(emp表中的行数)。对于每一行,您选择的值是恒定的。5所以,你得到 14 行,每行包含5.

根据您的查询,该列也被5隐式命名。


select something from emp;

something既不是常数,也不是列。连一个表情都没有。如果你会说

select 'something' from emp;

那么你会得到 14 行,每行包含一个文本(varchar)值something

于 2013-04-11T11:57:54.990 回答