在Oracle中,是否需要使用'as'关键字来定义别名?

68

在Oracle中,是否需要使用'AS'关键字定义SELECT语句中列的别名?

我注意到

SELECT column_name AS "alias"

等同于

SELECT column_name "alias"

我想知道以后这种方式定义列别名会有什么后果。


1
请注意,别名名称需要双引号(而不是单引号)。这是一个小但重要的细节。 - JosephDoggie
7个回答

53
根据Oracle select文档,select_list中的AS是可选的。个人认为在AS存在时更容易阅读。

8
在联接表别名中,Oracle 11c不支持使用AS关键字(已测试)。 - mvorisek

35

(在Oracle 11g上测试过)

关于AS

  • 当用于结果列时,AS是可选的。
  • 当用于表名时,不应添加AS,否则会出错。

关于双引号

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

例如

-- '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吗?我很好奇这是为什么,因为从直觉上看这似乎相当不一致,而其他DBMS如MySQL则允许它。 - ZeroKnight
@ZeroKnight 没有头绪,可能是由于历史原因。 - Eric

9

不使用双引号的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和双引号。


1
您可以在ORDER BY中使用双引号别名。如果列名中有空格,这将特别有帮助。因此,如果您的别名是department_id AS“Department Name”,则需要执行ORDER BY“Department Name” - fotijr

7

两种都是正确的。Oracle允许使用两种方式。


7

我的结论是(在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和""引起问题的原因并不是AS本身。
注意:如果别名包含空格或包含小写字母,并且必须以小写形式显示在结果集中,则需要使用双引号"". 在所有其他情况下,它是可选的,可以忽略。

5
引号在Alias Name中有空格时是必需的。
SELECT employee_id,department_id AS "Department ID"
FROM employees
order by department

1
这应该是一条注释。 - Jonathan

1
没有区别,AS只是更明确地提到别名的一种方式,这很好,因为一些依赖于这个小关键字的。例如,JDBC 4.0。根据使用情况,可能会观察到不同的行为。
请参见this。我总是建议使用语义的完整形式以避免此类问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接