Использование псевдонимов таблиц и столбцов в запросах

Вы можете указать временное имя для таблицы или столбца. Это имя называется псевдонимом (alias). PostgreSQL использует псевдонимы во время выполнения запроса и не сохраняет их в базе данных или на диске.

Создадим таблицу для примеров:

CREATE TABLE employees (
employee_id serial PRIMARY KEY,
full_name VARCHAR NOT NULL,
hours INT,
rate  INT,
manager_id INT
);

Добавим данные в таблицу:

INSERT INTO employees (employee_id, full_name, hours, rate, manager_id)
    VALUES
    (1, 'James Wilson', 8, 500, NULL),
    (2, 'Mary Burton', 6, 450, 1),
    (3, 'Patricia Robinson', 7, 430, 1),
    (4, 'Robert Gray', 8, 480, 1),
    (5, 'Elizabeth Tucker', 7, 470, 2),
    (6, 'Joseph Lewis', 7, 470, 2),
    (7, 'William Ferguson', 7, 470, 2),
    (8, 'Linda Black', 6, 320, 3),
    (9, 'David Green', 6, 310, 3),
    (10, 'Daniel Gray', 5, 390, 5),
    (11, 'Mark Armstrong', 6, 320, 4),
    (12, 'Donald Carter', 9, 290, 7),
    (13, 'Elizabeth Collins', 8, 300, 7),
    (14, 'Paul Brown', 8, 280, 8),
    (15, 'Andrew Clarke', 8, 280, 8);

Результат:

SELECT * FROM employees;

 employee_id |     full_name     | hours | rate | manager_id
-------------+-------------------+-------+------+------------
           1 | James Wilson      |     8 |  500 |
           2 | Mary Burton       |     6 |  450 |          1
           3 | Patricia Robinson |     7 |  430 |          1
           4 | Robert Gray       |     8 |  480 |          1
           5 | Elizabeth Tucker  |     7 |  470 |          2
           6 | Joseph Lewis      |     7 |  470 |          2
           7 | William Ferguson  |     7 |  470 |          2
           8 | Linda Black       |     6 |  320 |          3
           9 | David Green       |     6 |  310 |          3
          10 | Daniel Gray       |     5 |  390 |          5
          11 | Mark Armstrong    |     6 |  320 |          4
          12 | Donald Carter     |     9 |  290 |          7
          13 | Elizabeth Collins |     8 |  300 |          7
          14 | Paul Brown        |     8 |  280 |          8
          15 | Andrew Clarke     |     8 |  280 |          8

Псевдонимы таблиц

Вы можете назначить псевдоним таблице или ссылке на сложную таблицу и использовать этот псевдоним в текущем запросе. Ссылка на таблицу может быть производной таблицей, например подзапросом, выражением JOIN или сложной комбинацией этих конструкций.

Используйте следующий синтаксис для назначения псевдонима:

FROM <ссылка_на_таблицу> AS <псевдоним>

или

FROM <ссылка_на_таблицу> <псевдоним>

Где:

  • ссылка_на_таблицу  —  имя таблицы или сложная ссылка на таблицу;

  • псевдоним — уникальный идентификатор в рамках запроса.

Ключевое слово AS не является обязательным.

Псевдонимы часто используются для присвоения коротких идентификаторов длинным именам таблиц, чтобы улучшить читаемость запросов. Например:

SELECT * FROM very_long_table_name1 a JOIN very_long_table_name2 b ON a.id = b.num_id;

Псевдоним становится новым именем таблицы в текущем запросе. Если назначен псевдоним, исходное имя таблицы нельзя использовать в запросе. Например, следующий запрос выдаст ошибку:

-- некорректный запрос

SELECT * FROM table1 AS t WHERE table1.id > 276;

Хотя псевдонимы в основном используются для удобства, они необходимы, когда таблица соединяется сама с собой:

SELECT manager.employee_id, manager.full_name,
    subordinate.employee_id, subordinate.full_name, subordinate.manager_id
FROM employees AS manager
JOIN employees AS subordinate
ON manager.employee_id = subordinate.manager_id;

Результат:

employee_id |     full_name     | employee_id |     full_name     | manager_id
------------+-------------------+-------------+-------------------+------------
          1 | James Wilson      |           2 | Mary Burton       |          1
          1 | James Wilson      |           3 | Patricia Robinson |          1
          1 | James Wilson      |           4 | Robert Gray       |          1
          2 | Mary Burton       |           5 | Elizabeth Tucker  |          2
          2 | Mary Burton       |           6 | Joseph Lewis      |          2
          2 | Mary Burton       |           7 | William Ferguson  |          2
          3 | Patricia Robinson |           8 | Linda Black       |          3
          3 | Patricia Robinson |           9 | David Green       |          3
          5 | Elizabeth Tucker  |          10 | Daniel Gray       |          5
          4 | Robert Gray       |          11 | Mark Armstrong    |          4
          7 | William Ferguson  |          12 | Donald Carter     |          7
          7 | William Ferguson  |          13 | Elizabeth Collins |          7
          8 | Linda Black       |          14 | Paul Brown        |          8
          8 | Linda Black       |          15 | Andrew Clarke     |          8

Псевдоним также требуется, если ссылка на таблицу является подзапросом. За дополнительными сведениями обратитесь к разделу Подзапросы в выражениях FROM.

В случае неоднозначности определения псевдонимов можно использовать скобки. В следующем примере первое выражение назначает псевдоним staff второму экземпляру employees, а второе выражение назначает псевдоним результату CROSS JOIN:

SELECT * FROM employees AS managers CROSS JOIN employees AS staff ...
SELECT * FROM (employees AS managers CROSS JOIN employees) AS staff ...

Псевдонимы недоступны вне круглых скобок. Например, следующий запрос корректен:

SELECT a.* FROM table1 AS a JOIN table2 AS b ON a.id = b.num_id;

Однако псевдоним a не виден за скобками в приведенном ниже запросе:

-- некорректный запрос

SELECT a.* FROM (table1 AS a JOIN table2 AS b ON a.id = b.num_id) AS c;

Псевдонимы столбцов

Псевдоним столбца позволяет присвоить временное имя столбцу или выражению в списке значений SELECT. Псевдоним столбца существует только во время выполнения запроса.

Псевдонимы обычно состоят из строчных букв. Если вам нужно использовать заглавные буквы, специальные символы, пробелы или ключевые слова, заключите псевдоним в двойные кавычки ".

Используйте следующий синтаксис для назначения псевдонима:

SELECT <имя_столбца> AS <псевдоним> FROM <таблица>;

или

SELECT <имя_столбца> <псевдоним> FROM <таблица>;

Где:

  • имя_столбца — имя столбца;

  • псевдоним — уникальный идентификатор столбца;

  • таблица — имя таблицы.

Ключевое слово AS не является обязательным.

Пример:

SELECT employee_id AS id, full_name AS "full name" FROM employees LIMIT 3;

Результат:

 id |     full name
----+-------------------
  1 | James Wilson
  2 | Mary Burton
  3 | Patricia Robinson

Обратите внимание, что псевдоним выводится в заголовке столбца.

Вы можете указать псевдоним для выражения:

SELECT full_name "full name", hours*rate sum FROM employees LIMIT 3;

Результат:

     full name     | sum
-------------------+------
 James Wilson      | 4000
 Mary Burton       | 2700
 Patricia Robinson | 3010

Вы также можете использовать альтернативный синтаксис для назначения псевдонимов столбцам и таблице одновременно:

FROM <ссылка_на_таблицу> [AS] <псевдоним> ( <псевдоним_столбца1> [, <псевдоним_столбца2> [, ...]] )

Где:

  • ссылка_на_таблицу — имя таблицы или сложная ссылка на таблицу;

  • псевдоним — псевдоним таблицы;

  • псевдоним_столбца1..n — псевдонимы столбцов.

Если псевдонимов столбцов оказывается меньше, чем столбцов в таблице, остальные столбцы сохраняют свои исходные имена.

Пример:

SELECT * FROM employees AS managers ( id, "full name") LIMIT 3;

Результат:

 id |     full name     | hours | rate | manager_id
----+-------------------+-------+------+------------
  1 | James Wilson      |     8 |  500 |
  2 | Mary Burton       |     6 |  450 |          1
  3 | Patricia Robinson |     7 |  430 |          1
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней