【问题标题】:why select 5 from emp does not give error为什么 select 5 from emp 没有给出错误
【发布时间】:2013-04-03 14:40:19
【问题描述】:

如果 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

【问题讨论】:

  • 对我来说似乎是有效的 sql,你有什么问题?
  • 是的,但我的疑问是,emp 表中不存在任何列5。然后,为什么它被执行并显示这个输出。这背后的逻辑是什么。 ?
  • 您不是在选择列,而是在选择一个值。我认为在 oracle 中,如果您编写 SELECT "5" FROM emp ,则 qoutes 会强制引擎将 5 解释为列名,那么这将是一个错误
  • 你可以在那个地方放几个东西。其中包括字符串 ("something")、列名 (something)(如果它们不存在则会给出错误)、数字 (5) 等。逻辑是事物(一堆字母,一个数字)被区别对待...

标签: oracle select


【解决方案1】:

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

select id, 5
from emp

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

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

select id, 'something'
from emp

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

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

【讨论】:

  • 我知道,但我的问题是为什么?
  • 5 有效,因为它是一个数字,如果您将单引号括起来,您的第二个版本 something 将有效。这是有效的,因为它是一个静态值。
  • 你能解释一下,幕后发生了什么。我会很感激的。
  • @jWeavers 您的表格有 14 行,因为您是从表格中选择的,所以每行都会重复常量值。
【解决方案2】:

select一个或多个表达式,可能是simple expressions

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

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

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

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

 select 'something' from dual;

如果没有引号,something 将是列的有效名称,因此 Oracle 尝试将其解释为该名称并失败,因为没有这样的列。 5 不是有效的列名(请参阅the object naming rules,因此不会混淆,它被解释为固定值,而不是列名。

【讨论】:

    【解决方案3】:

    您选择 14 行(emp 表中的行数)。对于每一行,您选择的 始终为 5。所以,你得到 14 行,每行包含 5

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


    select something from emp;
    

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

    select 'something' from emp;
    

    那么您将获得 14 行,每行包含一个文本 (varchar) 值 something

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 2013-12-10
      相关资源
      最近更新 更多