Skip to content

适用虚谷数据库版本

v12.10.13



适用虚谷数据库版本

v12.10.13


默认别名

📄字数 2.4K
👁️阅读量 加载中...

通常在 SELECT 查询中,会出现查询的结果集不是一个单纯的字段名,而是一个表达式的情况,例如:UPPER(employee_name), salary * 1.5 等,其中 employee_namesalary 是字段名。在这种情形下,数据库建议为表达式显式指定一个别名,这个别名应该是便于理解的。如果不指定,数据库会根据一定的规则生成一个默认的别名。默认别名根据不同的数据库兼容模式,遵循的规则也不尽相同。

接下来将详细介绍不同的数据库兼容模式下的默认别名规则。

默认数据库模式

当数据库的兼容模式参数 COMPATIBLE_MODE 被设置为 NONE 时,默认别名统一为 EXPR1, EXPR2, ..., EXPRN 格式,其中,EXPR1 表示查询结果集中第一个表达式的默认别名,EXPR2 表示查询结果集中第二个表达式的默认别名,EXPRN 表示查询结果集中第n个表达式的默认别名。

例如:

sql
SELECT name, UPPER(name), salary, salary * 1.5 from employees;

+------+-------+--------+-------+
| NAME | EXPR1 | SALARY | EXPR2 |
+------+-------+--------+-------+
| bob  | BOB   | 6000   | 9000  |
+------+-------+--------+-------+

Oracle数据库兼容模式

当数据库的兼容模式参数 COMPATIBLE_MODE 被设置为 ORACLE 时,默认别名遵循以下规则,详见表1。

  • 表1
类别默认别名规则说明其他说明
字面量字面量表达式大写,去掉空格
NULL 值表达式表达式大写,删除空格
层次查询伪列层次查询伪列表达式大写,删除空格
序列伪列表达式大写,删除空格Oracle 只显示 NEXTVAL 或 CURRVAL 大写形式(去掉序列名)
COLUMN_VALUE 伪列返回⼀个单列的 COLUMN_VALUE 伪列大写形式
ROWID 伪列返回 ROWID 伪列大写形式
ROWNUM 假列返回 ROWNUM 伪列大写形式
算术运算符表达式大写,删除空格
|| 运算符表达式大写(整个拼接表达式),删除空格
层级查询操作符表达式大写(PRIOR操作符+列名),删除空格
集合运算符第一个SELECT 结果集表达式大写,删除空格
简单表达式表达式大写,删除空格
复合表达式表达式大写,删除空格
CASE 表达式表达式大写,删除空格
列表达式表达式大写,删除空格
日期时间表达式日期时间表达式大写,删除空格
函数表达式函数表达式大写,删除空格
间隔表达式时间间隔表达式大写,删除空格
标量子查询表达式整个子查询表达式大写,删除空格
类型构造表达式类型构造表达式大写,删除空格
表达式列表整个表达式列表大写,删除空格
BOOLEAN 表达式表达式大写,删除空格
比较条件表达式大写,删除空格
浮点条件表达式大写,删除空格
逻辑条件表达式大写,删除空格
模式匹配条件表达式大写,删除空格
NULL 条件表达式大写,删除空格
复合条件表达式大写,删除空格
BETWEEN 条件表达式大写,删除空格
EXISTS 条件表达式大写,删除空格
IN 条件表达式大写,删除空格
布尔测试条件表达式大写,删除空格
聚合函数表达式大写,删除空格
分析函数表达式大写,删除空格
系统函数表达式大写,删除空格包括数值、字符串、日期时间等系统函数
用户自定义函数表达式大写,删除空格
XML 函数表达式大写,删除空格
JSON 函数表达式大写,删除空格
列被表名或者模式名限定删除限定的表和模式,列或表达式大写,删除空格
  • 其他规则

    • 默认别名的最大长度为255字节(单字节字符最大长度为251个字节,多字节字符的最大长度为255个字节),若表达式超过最大长度则发生截断。
    • 如果列是带双引号的简单列名,则默认别名是去掉双引号的列名,大小写保持不变。

注意

  • 未尽事宜,以实际显示结果为准。
  • ORACLE 兼容模式下,生成的默认别名均为大写形式。

MySQL数据库兼容模式

当数据库的兼容模式参数 COMPATIBLE_MODE 被设置为 MYSQL 时,默认别名遵循以下规则。

  • 默认别名的最大长度为255,若表达式超过最大长度则发生截断。
  • 如果列是简单列名,默认别名是该列名。
  • 如果列是带反引号的简单列名,默认别名为去掉反引号的列名,大小写保持不变。
  • MySQL 兼容模式下的默认别名和 Oracle 兼容模式下的默认别名相似,都是将整个表达式作为默认别名。最大的区别在于:MySQL 不删除表达式的空格,且大小写和输入保持一致

PostgreSQL数据库兼容模式

当数据库的兼容模式参数 COMPATIBLE_MODE 被设置为 POSTGRESQL 时,默认别名遵循以下规则,详见表2。

  • 表2
类别默认别名规则说明其他说明
NULL默认别名是 ?column?
简单或者被限定的列名默认别名是最后一个字段名例如:().attr_name,默认别名是attr_name
数组下标默认别名是数组名
函数默认别名为函数名
NULLIF() 表达式默认别名为nullif注:nullif()表达式被视为函数,类似decode()表达式,也应该被视为函数
类型转换表达式默认别名为参数名,或者最后一个类型名
EXISTS_SUBLINK 子查询默认别名为exists例如:exists (select ... from table_name)
EXPR_SUBLINK 子查询默认别名为子查询中第一个查询结果,不是子查询,则为 ?column?
ALL_SUBLINK 子查询默认别名为 ?column?
ANY_SUBLINK 子查询默认别名为 ?column?
case表达式默认别名为默认值,或为case
数组表达式默认别名为array例如:ARRAY[1,2,3],默认别名为array
类型构造器默认别名为自定义类型名
Coalesce表达式默认别名为coalesce注:被视为函数
greatest表达式默认别名为greatest注:被视为函数
least表达式默认别名为least注:被视为函数
xml表达式默认别名为xml表达式的名字注:被视为函数
json表达式默认别名为json表达式的名字注:被视为函数
以上均不满足默认别名为 ?column?

注意

  • 强烈建议 POSTGRESQL 兼容模式下,为表达式显式指定别名。
  • POSTGRESQL 兼容模式下,生成的默认别名均为小写形式。
  • 未尽事宜,以实际显示结果为准。