Псевдонимы в SQL

Когда несколько таблиц объединяются в одном запросе, необходимо указывать имя каждого столбца с именем таблицы, к которой он принадлежит, например employees.dept_id, departments.dept_id, чтобы избежать путаницы и ошибки неоднозначного столбца. Она возникает в случае, если столбцы в разных таблицах имеют одинаковые имена.

Если имена таблиц длинные и встречаются несколько раз в запросе, то написание запроса становится сложной и раздражающей задачей. Чтобы сэкономить время и не писать полные имена таблиц, можно дать каждой таблице короткий псевдоним (alias) и ссылаться на ее столбцы по псевдониму.

Давайте разберемся с псевдонимами на примере таблицы employees и departments.

Таблица employees

Таблица departments

+--------+--------------+------------+---------+
| 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 |
+--------+--------------+------------+---------+
+---------+------------------+
| dept_id | dept_name        |
+---------+------------------+
|       1 | Administration   |
|       2 | Customer Service |
|       3 | Finance          |
|       4 | Human Resources  |
|       5 | Sales            |
+---------+------------------+

Следующий запрос извлекает идентификатор сотрудника, его имя и название отдела, объединяя таблицы employees и departments по общему полю dept_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               |
+--------+-----------------+--------------------+

Обратите внимание, насколько меньше текста потребовалось написать во втором запросе. В этом и есть преимущество псевдонимов таблиц.

Подробнее об объединении таблиц мы говорили в предыдущем разделе. 

Определение псевдонимов для столбцов таблицы

В MySQL, когда вы используете функцию для создания пользовательского вывода, имя столбца в выводе может быть нечитаемым или очень сложным для понимания. В этом случае лучше использовать псевдонимы, чтобы временно дать другое имя столбцу в выводе.

Рассмотрим следующий запрос, он переформатирует даты в столбце hire_date для создания пользовательского вывода:

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                       |
+--------------+-------------------------------------+

Как вы видите, имя последнего столбца в выводе длинное и громоздкое. Эта проблема решается с помощью псевдонимов столбцов:

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    |
+--------------+------------------+

Примечание. Псевдоним можно использовать в выражениях GROUP BY, ORDER BY или HAVING, чтобы ссылаться на столбец. А вот в WHERE использовать псевдонимы нельзя.

codechick

СodeСhick.io - простой и эффективный способ изучения программирования.

2024 ©