本章介绍在SQL语句中,如何为表或字段添加简短别名。
定义表的别名
当在一个查询语句中有多个表时,需要在字段前面加表名,以避免不同表中的同名字段冲突。但是,如果表名很长,并且出现多次,编写查询语句将很繁琐。
可以为每个表定义简短的别名,使用别名简化查询语句。
让我们看看下面的employees和departments表。
employees
+--------+--------------+------------+---------+
| emp_id | emp_name | hire_date | dept_id |
+--------+--------------+------------+---------+
| 1 | Ethan Hunt | 2001-05-01 | 4 |
| 2 | Tony Montana | 2002-07-15 | 1 |
| 3 | Sarah Connor | 2005-10-18 | 5 |
| 4 | Rick Deckard | 2007-01-03 | 3 |
| 5 | Martin Blank | 2008-06-24 | NULL |
+--------+--------------+------------+---------+
departments
+---------+------------------+
| dept_id | dept_name |
+---------+------------------+
| 1 | Administration |
| 2 | Customer Service |
| 3 | Finance |
| 4 | Human Resources |
| 5 | Sales |
+---------+------------------+
下面的查询,通过使用公共dept_id
字段将employees和departments表连接在一起,检索员工的id、名称和部门名称。
SELECT employees.emp_id, employees.emp_name, departments.dept_name
FROM employees LEFT JOIN departments
ON employees.dept_id = departments.dept_id ORDER BY emp_id;
以下是使用表别名后的精简版本:
SELECT t1.emp_id, t1.emp_name, t2.dept_name
FROM employees AS t1 LEFT JOIN departments AS t2
ON t1.dept_id = t2.dept_id ORDER BY emp_id;
如果您执行这些语句中的任何一条,将得到相同的输出,如下所示:
+--------+-----------------+--------------------+
| emp_id | emp_name | dept_name |
+--------+-----------------+--------------------+
| 1 | Ethan Hunt | Human Resources |
| 2 | Tony Montana | Administration |
| 3 | Sarah Connor | Sales |
| 4 | Rick Deckard | Finance |
| 5 | Martin Blank | NULL |
+--------+-----------------+--------------------+
可以看到,通过使用表别名,可以节省很多输入工作。
请查看SQL join部分,以了解更多关于表连接的信息。
为字段定义别名
在MySQL中,有时查询结果中的字段名称不适合人类阅读,可以为这些字段指定别名。
考虑下面的查询,其中使用了一个表达式来重新格式化hire_date
字段中的日期:
-- Syntax for MySQL Database
SELECT emp_name, DATE_FORMAT(hire_date, '%M %e, %Y') FROM employees;
如果你执行上面的语句,会得到这样的输出:
+--------------+-------------------------------------+
| emp_name | DATE_FORMAT(hire_date, '%M %e, %Y') |
+--------------+-------------------------------------+
| Ethan Hunt | May 1, 2001 |
| Tony Montana | July 15, 2002 |
| Sarah Connor | October 18, 2005 |
| Rick Deckard | January 3, 2007 |
| Martin Blank | June 24, 2008 |
+--------------+-------------------------------------+
最后一列的名称很长,可以为它指定别名,如下所示:
-- Syntax for MySQL Database
SELECT emp_name, DATE_FORMAT(hire_date, '%M %e, %Y') AS hire_date
FROM employees;
如果您执行上述语句,将得到更加简洁易读的输出,如下所示:
+--------------+------------------+
| emp_name | hire_date |
+--------------+------------------+
| Ethan Hunt | May 1, 2001 |
| Tony Montana | July 15, 2002 |
| Sarah Connor | October 18, 2005 |
| Rick Deckard | January 3, 2007 |
| Martin Blank | June 24, 2008 |
+--------------+------------------+