在 sql 中的 * 后设置别名

setting an alias after the * in sql

有没有办法在星号 (*) 之后为 ORACLE SQL 中的不同列创建别名?

SELECT * 
FROM TABLE 
WHERE INDEX_1 = 5
AND INDEX_2 = 6 

有没有办法在 * 之后设置别名?

SELECT * INDEX_1 AS INDECIES
FROM TABLE 
WHERE INDEX_1 = 5
AND INDEX_2 = 6
; 

没有

SELECT 语句的 select_list part in oracle grammar 的语法是这样的:

{ *
  | { query_name.*
      | [ schema. ]
        { table | view | materialized view } .*
      | expr [ [ AS ] c_alias ]
    }
    [, { query_name.*
       | [ schema. ]
         { table | view | materialized view } .*
       | expr [ [ AS ] c_alias ]
       }
    ]...
}

这意味着,要么是星号,要么是行源限定的星号和离散列。 *.

后没有 c_alias 标记

可以做的 是组合星号和字段列表,即使两个部分引用相同的 table,如下所示:

SELECT
  TA1.*,
  TA1.Column1 AS ColumnX
FROM Table1 TA1

various reasons 不鼓励使用星号。在临时查询中使用它是为了方便。

不过,也可以使用一点点 "mix":行源限定星号 AND(即非或)字段列表,例如

SQL> select d.*, e.ename
  2  from dept d, emp e
  3  where e.deptno = d.deptno
  4    and d.deptno = 10;

    DEPTNO DNAME          LOC           ENAME
---------- -------------- ------------- ----------
        10 ACCOUNTING     NEW YORK      KING
        10 ACCOUNTING     NEW YORK      CLARK
        10 ACCOUNTING     NEW YORK      MILLER
        10 ACCOUNTING     NEW YORK
        10 ACCOUNTING     NEW YORK

SQL>

如果您使用的是 SQLPLUS,则可以使用 COLUMN 命令为任何列设置显示的标题,而不管它是使用星号还是按名称选择的。

例如 列 col_123 标题 'Account Number'.

SQLPLUS 参考在这里:https://docs.oracle.com/cd/B28359_01/server.111/b31189/ch12013.htm