
6.7 为表和字段取别名
在前面介绍分组查询、集合函数查询和嵌套子查询章节中,有的地方为查询结果中的某一列指定了一个特定的名字,在内连接查询时对相同的表fruits分别指定两个不同的名字。这里可以为字段或者表取一个别名,在查询时,使用别名替代其指定的内容,本节将介绍如何为字段和表创建别名以及如何使用别名。
6.7.1 为表取别名
当表名字很长或者执行一些特殊查询时,为了方便操作或者需要多次使用相同的表时,可以为表指定别名,用这个别名替代表原来的名称。为表取别名的基本语法格式为:

“表名”为数据库中存储的数据表的名称,“表别名”为查询时指定的表的新名称,AS关键字为可选参数。
【例6.63】为orders表取别名o,查询30001订单的下单日期,SQL语句如下:

在这里orders o代码表示为orders表取别名为o,指定过滤条件时直接使用o代替orders,查询结果如下:

【例6.64】为customers和orders表分别取别名,并进行连接查询,SQL语句如下:

由结果看到,Oracle可以同时为多个表取别名,而且表别名可以放在不同的位置,如WHERE子句、SELECT列表、ON子句以及ORDER BY子句等。
在前面介绍内连接查询时指出自连接是一种特殊的内连接,在连接查询中的两个表都是同一个表,其查询语句如下:

在这里,如果不使用表别名,Oracle将不知道引用的是哪个fruits表实例,这是表别名非常有用的地方。
提示
在为表取别名时,要保证不能与数据库中其他表的名称冲突。
6.7.2 为字段取别名
在本章和前面各章节的例子中可以看到,在使用SELECT语句显示查询结果时,Oracle会显示每个SELECT后面指定的输出列,在有些情况下,显示的列的名称会很长或者名称不够直观,Oracle可以指定列别名,替换字段或表达式。为字段取别名的基本语法格式为:

“列名”为表中字段定义的名称,“列别名”为字段新的名称,AS关键字为可选参数。
【例6.65】查询fruits表,为f_name取别名fruit_name,f_price取别名fruit_price,为fruits表取别名f1,查询表中f_price <8的水果的名称,SQL语句如下:

也可以为SELECT子句中的计算字段取别名,例如,对使用COUNT聚合函数或者CONCAT等系统函数执行的结果字段取别名。
【例6.66】查询suppliers表中字段s_name和s_city,使用CONCAT函数连接这两个字段值,并取列别名为suppliers_title。
如果没有对连接后的值取别名,其显示列名称将会不够直观,SQL语句如下:

由结果可以看到,显示结果的列名称为SELECT子句后面的计算字段,实际上计算之后的列是没有名字的,这样的结果让人很不容易理解,如果为字段取一个别名,将会使结果清晰,SQL语句如下:

由结果可以看到,SELECT子句计算字段值之后增加了AS suppliers_title,它指示Oracle为计算字段创建一个别名suppliers_title,显示结果为指定的列别名,这样就增强了查询结果的可读性。
提示
表别名只在执行查询的时候使用,并不在返回结果中显示,而列别名定义之后,将返回给客户端显示,显示的结果字段为字段列的别名。