Oracle中是否需要'AS'关键字来为SELECT语句中的列定义别名?
我注意到了
SELECT column_name AS "alias"
是相同的
SELECT column_name "alias"
我想知道以后一种方式定义列别名的后果是什么。
根据select_list Oracle select documentation,AS是可选的。
作为个人笔记,我认为使用AS更容易阅读
(在Oracle 11g
上测试过)
关于AS
:
AS
是可选的。AS
,否则会出错。关于double quote
:
e.g
-- '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";
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而不使用双引号
两者都是正确的。 Oracle允许使用两者。
当我们在Alias Name中有一个空格时,需要<kdb></kdb>
SELECT employee_id,department_id AS "Department ID"
FROM employees
order by department
我的结论是(经测试12c):
因此:
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
注意:如果别名包含空格,则需要“双引号”;如果它包含小写字符,则必须使用双引号,并且必须在结果集中显示为小写字符。在所有其他场景中,它的可选性可以忽略不计。
两者之间没有区别,AS
只是提及别名的一种更明确的方式,因为一些依赖库依赖于这个小关键字。例如JDBC 4.0。依赖于它的使用,可以观察到不同的行为。
见this。我总是建议使用完整形式的语义来避免这些问题。