通常情况下我们通过计算字段得到的字段名都是比较长的,为了提高查询结果的可读性,我们可以使用AS关键字设置别名,使查询语句更简洁。
MySQL支持两种别名:列别名和表别名。
语法:
select [as] from [as] ;as关键字可省略
列别名
有时列名称是一些表达式,使查询结果的输出很难理解,可以使用列别名设置描述性名称。
示例1:查询所有员工总人数和平均工资
mysql> select count(*) as 员工数,avg(sal) as 平均工资 from emp;
+-----------+-------------------+
| 员工数 | 平均工资 |
+-----------+-------------------+
| 14 | 2073.214285714286 |
+-----------+-------------------+
示例2:别名包含空格时,需要加引号
mysql> select count(*) as 'count num',avg(sal) as 'avg sal' from emp;
+-----------+-------------------+
| count num | avg sal |
+-----------+-------------------+
| 14 | 2073.214285714286 |
+-----------+-------------------+
示例3:查询员工数不低于5人的部门平均工资,按平均工资降序显示
mysql> select deptno 部门号,count(empno) 员工数,avg(sal) 平均工资
-> from emp
-> group by 部门号
-> having 员工数>=5
-> order by 平均工资 desc;
+-----------+-----------+--------------------+
| 部门号 | 员工数 | 平均工资 |
+-----------+-----------+--------------------+
| 20 | 5 | 2175 |
| 30 | 6 | 1566.6666666666667 |
+-----------+-----------+--------------------+
设置别名后可以在order by,group by和having子句中使用列别名来引用该列。
不能在WHERE子句中使用列别名。因为当MySQL评估求值WHERE子句时,SELECT子句中指定的列的值可能尚未确定。
表别名
当表名重复引用时,可以使用别名为表添加不同的名称,用于简化和区分。
示例:查询所有领导姓名及其下属员工姓名
mysql> select e1.ename 上层领导,e2.ename 下属员工
-> from emp e1,emp e2
-> where e1.empno=e2.mgr;
+--------------+--------------+
| 上层领导 | 下属员工 |
+--------------+--------------+
| ford | smith |
| blake | allen |
| blake | ward |
| king | jones |
| blake | martin |
| king | blake |
| king | clark |
| jones | scott |
| blake | turner |
| scott | adams |
| blake | james |
| jones | ford |
| clark | miller |
+--------------+--------------+
要保证表别名不能与数据库中的其他表名或关键字重复。
表别名只在执行查询时使用,并不在返回结果中显示。而列别名客户端的查询结果中显示,显示的结果集中字段名为字段的别名。