![MySQL 8从入门到精通(视频教学版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/737/26542737/b_26542737.jpg)
7.7 为表和字段取别名
在前面介绍分组查询、集合函数查询和嵌套子查询章节中,读者注意到有的地方使用AS关键字为查询结果中的某一列指定一个特定的名字。在内连接查询时,则对相同的表fruits分别指定两个不同的名字,这里可以为字段或者表取一个别名,在查询时,使用别名替代其指定的内容,本节将介绍如何为字段和表创建别名以及如何使用别名。
7.7.1 为表取别名
当表名字很长或者执行一些特殊查询时,为了方便操作或者需要多次使用相同的表时,可以为表指定别名,用这个别名替代表原来的名称。为表取别名的基本语法格式为:
表名 [AS] 表别名
“表名”为数据库中存储的数据表的名称,“表别名”为查询时指定的表的新名称,AS关键字为可选参数。
【例7.64】为orders表取别名o,查询30001订单的下单日期,SQL语句如下:
![](https://epubservercos.yuewen.com/76103A/15056702904172406/epubprivate/OEBPS/Images/288.jpg?sign=1739017564-5GGYh2AwxzIj02WpyfUCrx6JDbM1IUTB-0-e3f14d0523ebf81d88bacc2e699e1e97)
在这里orders AS o代码表示为orders表取别名为o,指定过滤条件时直接使用o代替orders,查询结果如下:
![](https://epubservercos.yuewen.com/76103A/15056702904172406/epubprivate/OEBPS/Images/289.jpg?sign=1739017564-6jddqRFgL5EJIg0iCjh1uRhzxCnwfYN2-0-45cf39b3fcc14d945c1410dd95e734b2)
【例7.65】为customers和orders表分别取别名,并进行连接查询,SQL语句如下:
![](https://epubservercos.yuewen.com/76103A/15056702904172406/epubprivate/OEBPS/Images/290.jpg?sign=1739017564-QtZCybbEEP8toVPKNmJ3vwwIGnQbDUYX-0-ba87fbe202996ee870841f8392717f2c)
由结果看到,MySQL可以同时为多个表取别名,而且表别名可以放在不同的位置,如WHERE子句、SELECT列表、ON子句以及ORDER BY子句等。
在前面介绍内连接查询时指出自连接是一种特殊的内连接,在连接查询中的两个表都是同一个表,其查询语句如下:
![](https://epubservercos.yuewen.com/76103A/15056702904172406/epubprivate/OEBPS/Images/291.jpg?sign=1739017564-ty75eTypTCPDIu3EyZJ4BsHGwsiZb5aA-0-9354b80b8c2c617299e38b9265cb740d)
在这里,如果不使用表别名,MySQL将不知道引用的是哪个fruits表实例,这是表别名一个非常有用的地方。
提示
在为表取别名时,要保证不能与数据库中其他表的名称冲突。
7.7.2 为字段取别名
从本章和前面各章节的例子中可以看到,在使用SELECT语句显示查询结果时,MySQL会显示每个SELECT后面指定的输出列,在有些情况下,显示的列的名称会很长或者名称不够直观,MySQL可以指定列别名,替换字段或表达式。为字段取别名的基本语法格式为:
列名 [AS] 列别名
“列名”为表中字段定义的名称,“列别名”为字段新的名称,AS关键字为可选参数。
【例7.66】查询fruits表,为f_name取别名fruit_name,f_price取别名fruit_price,为fruits表取别名f1,查询表中f_price < 8的水果的名称,SQL语句如下:
![](https://epubservercos.yuewen.com/76103A/15056702904172406/epubprivate/OEBPS/Images/292.jpg?sign=1739017564-cFomteX00SWtbcTI1Z1lZgYiX7cWo4Bt-0-d1f1e27914c36016e9bfc8614ad85119)
也可以为SELECT子句中的计算字段取别名。例如,对使用COUNT聚合函数或者CONCAT等系统函数执行的结果字段取别名。
【例7.67】查询suppliers表中字段s_name和s_city,使用CONCAT函数连接这两个字段值,并取列别名为suppliers_title。
如果没有对连接后的值取别名,其显示列名称将会不够直观,SQL语句如下:
![](https://epubservercos.yuewen.com/76103A/15056702904172406/epubprivate/OEBPS/Images/293.jpg?sign=1739017564-Xj1xuFx8yCS9cgTNO9bcAiBD2Sw4uU2g-0-bbc837da81f7d01bb7164c47534cfb44)
由结果可以看到,显示结果的列名称为SELECT子句后面的计算字段,实际上计算之后的列是没有名字的,这样的结果让人很不容易理解,如果为字段取一个别名,将会使结果清晰,SQL语句如下:
![](https://epubservercos.yuewen.com/76103A/15056702904172406/epubprivate/OEBPS/Images/294.jpg?sign=1739017564-Ho8xxU8nbhE28NHvJRNnPnucCuE0DUwL-0-06b3d9ccb6bb9856dded04478bcfe2de)
由结果可以看到,SELECT子句计算字段值之后增加了AS suppliers_title,它指示MySQL为计算字段创建一个别名suppliers_title,显示结果为指定的列别名,这样就增强了查询结果的可读性。
提示
表别名只在执行查询的时候使用,并不在返回结果中显示,而列别名定义之后,将返回给客户端显示,显示的结果字段为字段列的别名。