MySQL AS的用法(附带实例)
介绍分组查询、聚合函数查询和嵌套子查询时,有的地方使用了 AS 关键字为查询结果中的某一列指定一个特定的名字;在介绍内连接查询时,则对相同的表 fruits 分别指定了两个不同的名字。因此,我们可以为字段或者表取一个别名,在查询时,使用别名替代其指定的内容。
本节将介绍 MySQL 中如何为字段和表创建别名以及如何使用别名。
为表取别名的基本语法格式如下:
【实例 1】为表 orders 取别名“o”,查询 o_num 为 30001 的订单的下单日期,SQL 语句如下:
【实例 2】为表 customers 和表 orders 分别取别名,并进行连接查询,SQL 语句如下:
在前面介绍内连接查询时,指出自连接是一种特殊的内连接,在连接查询中的两张表是同一张表,其查询语句如下:
为字段取别名的基本语法格式为:
【实例 3】查询表 fruits,为 f_name 取别名 fruit_name,为 f_price 取别名 fruit_price,为表 fruits 取别名 f1,查询表中 f_price < 8 的水果的名称,SQL 语句如下:
也可以为 SELECT 子句中的计算字段取别名。例如,对使用 COUNT 聚合函数或者 CONCAT 等系统函数执行的结果字段取别名。
【实例 4】查询表 suppliers 中的字段 s_name 和 s_city,使用 CONCAT 函数连接这两个字段值,并取列别名为 suppliers_title。
1) 先不对连接后的值取别名,SQL 语句如下:
实际上计算之后的列是没有名字的,这样的结果不容易让人理解,如果为字段取一个别名,将会使结果清晰,SQL 语句如下:
注意,表别名只在执行查询的时候使用,并不在返回结果中显示;而列别名定义之后,将返回给客户端显示,显示字段列的别名。
本节将介绍 MySQL 中如何为字段和表创建别名以及如何使用别名。
MySQL为表取别名
当表名字很长或者要执行一些特殊查询时,为了方便操作,可以为表指定别名,用这个别名替代表原来的名称。为表取别名的基本语法格式如下:
表名 [AS] 表别名“表名”为数据库中存储的数据表的名称,“表别名”为查询时指定的表的新名称,AS 关键字为可选参数。
【实例 1】为表 orders 取别名“o”,查询 o_num 为 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 | +-------+---------------------+-------+
【实例 2】为表 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 表实例。这是表别名一个非常有用的地方。
注意,在为表取别名时,要保证不能与数据库中其他表的名称发生冲突。
MySQL为字段取别名
在使用 SELECT 语句显示查询结果时,MySQL 会显示每个 SELECT 后面指定的输出列。在有些情况下,显示的列的名称会很长或者名称不够直观,此时可以指定列别名,替换字段或表达式。为字段取别名的基本语法格式为:
列名 [AS] 列别名“列名”为表中字段定义的名称,“列别名”为字段的新名称,AS 关键字为可选参数。
【实例 3】查询表 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 等系统函数执行的结果字段取别名。
【实例 4】查询表 suppliers 中的字段 s_name 和 s_city,使用 CONCAT 函数连接这两个字段值,并取列别名为 suppliers_title。
1) 先不对连接后的值取别名,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 (Taiyuan) | | 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 (Taiyuan) | | Just Eat Ours (Beijing) | | LT Supplies (Chongqing) | +------------------------------------------------+SELECT 子句中增加了 AS suppliers_title,它指示 MySQL 为计算字段创建一个别名 suppliers_title,显示结果为指定的列别名,这样就增强了查询结果的可读性。
注意,表别名只在执行查询的时候使用,并不在返回结果中显示;而列别名定义之后,将返回给客户端显示,显示字段列的别名。