【问题标题】:Is the 'as' keyword required in Oracle to define an alias?Oracle 中是否需要“as”关键字来定义别名?
【发布时间】:2012-01-17 01:58:22
【问题描述】:

Oracle 中是否需要“AS”关键字来为 SELECT 语句中的列定义别名?

我注意到了

SELECT column_name AS "alias"

一样
SELECT column_name "alias"

我想知道以后一种方式定义列别名的后果是什么。

【问题讨论】:

  • 请注意,别名的双引号是必需的(而不是单引号)。一个小而重要的观点。

标签: sql oracle alias required


【解决方案1】:

当我们在别名中有空格时需要引号

SELECT employee_id,department_id AS "Department ID"
FROM employees
order by department

【讨论】:

  • 这应该是一条评论
【解决方案2】:

两者之间没有区别,AS 只是一种更明确的提及别名的方式,这很好,因为一些依赖 依赖于这个小关键字。例如JDBC 4.0。根据使用情况,可以观察到不同的行为。

this。我总是建议使用完整形式的语义来避免此类问题。

【讨论】:

    【解决方案3】:

    我的结论是(在12c上测试):

    • AS 始终是可选的,可以带或不带“”; AS 没有区别(仅列别名,不能使用 AS 前表别名)
    • 但是,有或没有 "" 确实会有所不同,因为 "" 允许别名可能小写

    因此:

    SELECT {T / t} FROM (SELECT 1 AS T FROM DUAL); -- Correct
    SELECT "tEST" FROM (SELECT 1 AS "tEST" FROM DUAL); -- Correct
    SELECT {"TEST" / tEST} FROM (SELECT 1 AS "tEST" FROM DUAL ); -- Incorrect
    
    SELECT test_value AS "doggy" FROM test ORDER BY "doggy"; --Correct
    SELECT test_value AS "doggy" FROM test WHERE "doggy" IS NOT NULL; --You can not do this, column alias not supported in WHERE & HAVING
    SELECT * FROM test "doggy" WHERE "doggy".test_value IS NOT NULL; -- Do not use AS preceding table alias
    

    所以,使用 AS AND "" 导致问题的原因不是 AS

    注意: "" 如果别名包含空格或包含小写字符且必须在结果集中显示为小写字符,则需要双引号。在所有其他情况下,它都是可选的,可以忽略。

    【讨论】:

      【解决方案4】:

      (在Oracle 11g 测试)

      关于AS

      • 结果列上使用时,AS 是可选的。
      • 表名上使用时,AS不应加,否则报错。

      关于double quote

      • 对于结果列和表名都是可选且有效的。

      例如

      -- 'AS' is optional for result column
      select (1+1) as result from dual;
      select (1+1) result from dual;
      
      
      -- 'AS' shouldn't be used for table name
      select 'hi' from dual d;
      
      
      -- Adding double quotes for alias name is optional, but valid for both result column & table name,
      select (1+1) as "result" from dual;
      select (1+1) "result" from dual;
      
      select 'hi' from dual "d";
      

      【讨论】:

      • 您知道 Oracle 不允许使用表名的 AS 的任何原因吗?我很好奇为什么会这样,因为直觉上似乎相当不一致,而 MySQL 等其他 DBMS 允许这样做。
      • @ZeroKnight 不知道,可能是由于历史原因。
      【解决方案5】:

      没有双引号的AS很好。

      SELECT employee_id,department_id AS department
      FROM employees
      order by department
      

      --好的--

      SELECT employee_id,department_id AS "department"
      FROM employees
      order by department
      

      --oracle 错误--

      如果使用 ORDER BY 子句,最好使用不带双引号的 AS

      【讨论】:

      • 您可以使用带有双引号别名的 ORDER BY。如果列名中有空格,这将特别有用。因此,如果您的别名是 department_id AS "Department Name",您需要使用 ORDER BY "Department Name"
      【解决方案6】:

      两者都是正确的。 Oracle 允许同时使用两者。

      【讨论】:

        【解决方案7】:

        根据 select_list Oracle select documentation,AS 是可选的。

        作为个人笔记,我认为使用 AS 更容易阅读

        【讨论】:

        • 在连接表别名中,AS 不受支持(在 Oracle 11c 上测试)
        猜你喜欢
        • 2014-02-04
        • 2011-05-01
        • 2019-04-14
        • 2012-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多