Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD_Otveti_po_liksiam.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
458.04 Кб
Скачать

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

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

Чтобы создать псевдоним таблицы, пишите

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

или

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

Ключевое слово AS является необязательным. Псевдоним может быть любым идентификатором.

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

SELECT * FROM some_very_long_table_name s JOIN another_fairly_long_name a ON s.id = a.num;

Псевдоним даёт новое имя ссылающееся на ту же таблицу в текущем запросе — поэтому где-либо ещё в текущем запросе не разрешается ссылаться на таблицу по первоначальному имени. Таким образом, вот это неправильно:

SELECT * FROM my_table AS m WHERE my_table.a > 5; -- ошибка

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

SELECT * FROM people AS mother JOIN people AS child ON mother.id = child.mother_id;

Кроме того, псевдноним также требуется, если ссылка на таблицу является подзапросом (см. Section 7.2.1.3).

Скобки используются для того, чтобы избежать путаницы. В следующем примере, первый оператор назначает псевдоним b для второй таблицы my_table, а второй оператор назначает псевдоним результату соединения:

SELECT * FROM my_table AS a CROSS JOIN my_table AS b ...

SELECT * FROM (my_table AS a CROSS JOIN my_table) AS b ...

Другая форма псевдонимов таблиц даёт временные имена колонкам таблицы, точно также как и для самой таблицы:

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

Вначале, указываются псевдонимы колонок, затем обычые колонки таблицы, оставшиеся колонки не переименовываются. Такой синтаксис особенно полезен для подзапросов соединений таблиц с самими собой.

Когда к результатам предложения JOIN применяется псевдоним, то этот псевдоним скрывает первоначальные имена внутри JOIN. Например:

SELECT a.* FROM my_table AS a JOIN your_table AS b ON ...

является правильным SQL запросом, но:

SELECT a.* FROM (my_table AS a JOIN your_table AS b ON ...) AS c

неправильный запрос: псевдоним таблицы a не виден за пределами псевдонима c.

7.2.1.3. Подзапросы

Подзапросы, предоставляющие на выходе таблицу, должны быть заключены в круглые скобки и им должен быть назначен псевдоним таблицы. (См. Section 7.2.1.2.) Например:

FROM (SELECT * FROM table1) AS alias_name

Этот пример эквивалентен FROM table1 AS alias_name. Когда подзапрос выполняет группировку или агрегирование, возникают более интересные случаи, которые не могут быть представлены как простое соединение таблиц.

Подзапрос также можте быть списком VALUES:

FROM (VALUES ('anne', 'smith'), ('bob', 'jones'), ('joe', 'blow'))

AS names(first, last)

И снова требуется псевдоним таблицы. Назначение имён псевдонимов для колонок списка VALUES необзяталеьно, но является хорошим тоном. Подробности см. в Section 7.7.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]