首页 > 编程笔记 > MySQL笔记 阅读:11

MySQL AS关键字:为表和字段取别名(附带实例)

学习 MySQL 的过程中,读者可能注意到有的地方使用 AS 关键字,为查询结果中的某一列指定一个特定的名字。

例如在内连接查询时,则对相同的表分别指定两个不同的名字,这里可以为字段或者表取一个别名,在查询时,使用别名替代其指定的内容。

本节将介绍如何为字段和表创建别名以及如何使用别名。

用AS关键字为表取别名

当表名字很长或者执行一些特殊查询时,为了方便操作或者需要多次使用相同的表时,可以为表指定别名,用这个别名替代表原来的名称。为表取别名的基本语法格式为:
表名 [AS] 表别名
“表名”为数据库中存储的数据表的名称,“表别名”为查询时指定的表的新名称,AS 关键字为可选参数。

【实例】为 orders 表取别名 o,查询 30001 订单的下单日期,SQL 语句如下:
SELECT * FROM orders AS o WHERE o.o_num = 30001;

在这里 orders AS o 代码表示为 orders 表取别名为 o,指定过滤条件时直接使用 o 代替 orders,查询结果如下:
+-------+---------------------+-------+
| o_num | o_date              |  c_id |
+-------+---------------------+-------+
| 30001 | 2008-09-01 00:00:00 | 10001 |
+-------+---------------------+-------+

【实例】为 customers 和 orders 表分别取别名,并进行连接查询,SQL 语句如下:
mysql> SELECT c.c_id, o.o_num FROM customers AS c LEFT OUTER JOIN orders AS o ON c.c_id = o.c_id;
+-------+-------+
| c_id  | o_num |
+-------+-------+
| 10001 | 30001 |
| 10001 | 30005 |
| 10002 | NULL  |
| 10003 | 30002 |
| 10004 | 30003 |
+-------+-------+
由结果看到,MySQL 可以同时为多个表取别名,而且表别名可以放在不同的位置,如 WHERE 子句、SELECT 列表、ON 子句以及 ORDER BY 子句等。

在前面介绍内连接查询时,我们知道自连接是一种特殊的内连接,在连接查询中的两个表都是同一个表,其查询语句如下:
mysql> SELECT f1.f_id, f1.f_name FROM fruits AS f1, fruits AS f2 WHERE f1.s_id = f2.s_id AND f2.f_id = 'a1';
+------+------------+
| f_id | f_name     |
+------+------------+
| a1   | apple      |
| b1   | blackberry |
| c0   | cherry     |
+------+------------+
在这里,如果不使用表别名,MySQL 将不知道引用的是哪个 fruits 表实例,这是表别名一个非常有用的地方。

在为表取别名时,要保证不能与数据库中其他表的名称冲突。

用AS关键字为字段取别名

在使用 SELECT 语句显示查询结果时,MySQL 会显示每个 SELECT 后面指定的输出列,在有些情况下,显示的列的名称会很长或者名称不够直观,MySQL 可以指定列别名,替换字段或表达式。

为字段取别名的基本语法格式为:
列名 [AS] 列别名
“列名”为表中字段定义的名称,“列别名”为字段新的名称,AS 关键字为可选参数。

【实例】查询 fruits 表,为 f_name 取别名 fruit_name,f_price 取别名 fruit_price,为 fruits 表取别名 f1,查询表中 f_price < 8 的水果的名称,SQL 语句如下:
mysql> SELECT f1.f_name AS fruit_name, f1.f_price AS fruit_price FROM fruits AS f1 WHERE f1.f_price < 8;
+------------+-------------+
| fruit_name | fruit_price |
+------------+-------------+
| apple      |       5.20 |
| apricot    |       2.20 |
| berry      |        7.60 |
| xxxx       |        3.60 |
| cherry     |        3.20 |
| lemon      |        6.40 |
| xbabay     |        2.60 |
| grape      |        5.30 |
| xbababa    |        3.60 |
+------------+-------------+

也可以为 SELECT 子句中的计算字段取别名。例如,对使用 COUNT 聚合函数或者 CONCAT 等系统函数执行的结果字段取别名。

【实例】查询 suppliers 表中字段 s_name 和 s_city,使用 CONCAT 函数连接这两个字段值,并取列别名为 suppliers_title。如果没有对连接后的值取别名,其显示列名称将会不够直观,SQL 语句如下:
mysql> SELECT CONCAT(TRIM(s_name) , ' (',  TRIM(s_city), ')') FROM suppliers
ORDER BY s_name;
+-------------------------------------------------+
| CONCAT(TRIM(s_name) , ' (',  TRIM(s_city), ')') |
+-------------------------------------------------+
| ACME (Shanghai)                                 |
| DK Inc. (Zhengzhou)                             |
| FastFruit Inc. (Tianjin)                        |
| FNK Inc. (Zhongshan)                            |
| Good Set (Taiyuang)                             |
| Just Eat Ours (Beijing)                         |
| LT Supplies (Chongqing)                         |
+-------------------------------------------------+
由结果可以看到,显示结果的列名称为 SELECT 子句后面的计算字段,实际上计算之后的列是没有名字的,这样的结果让人很不容易理解,如果为字段取一个别名,将会使结果清晰,SQL 语句如下:
mysql> SELECT CONCAT(TRIM(s_name) , ' (', TRIM(s_city), ')') AS suppliers_title FROM suppliers ORDER BY s_name;
+--------------------------+
| suppliers_title          |
+--------------------------+
| ACME (Shanghai)          |
| DK Inc. (Zhengzhou)      |
| FastFruit Inc. (Tianjin) |
| FNK Inc. (Zhongshan)     |
| Good Set (Taiyuang)      |
| Just Eat Ours (Beijing)  |
| LT Supplies (Chongqing)  |
+--------------------------+
由结果可以看到,SELECT 子句计算字段值之后增加了 AS suppliers_title,它指示 MySQL 为计算字段创建一个别名 suppliers_title,显示结果为指定的列别名,这样就增强了查询结果的可读性。

表别名只在执行查询的时候使用,并不在返回结果中显示,而列别名定义之后,将返回给客户端显示,显示的结果字段为字段列的别名。

相关文章