Псевдонимы в SQL: переименование столбцов с помощью AS
Урок 2.5 · Время чтения: ~5 мин · Задачи для практики ↓
Псевдоним столбца в SQL - это временное имя, которое вы даёте столбцу в результате запроса с помощью ключевого слова AS. В этом уроке вы изучите синтаксис псевдонимов, научитесь записывать псевдонимы с пробелами, узнаете, зачем они нужны вычисляемым столбцам и в каких частях запроса их можно использовать.
В предыдущих уроках вы выбирали столбцы ровно под теми именами, под которыми они хранятся в таблице. Имена столбцов часто технические, например rental_rate или replacement_cost, а у вычисляемого значения вроде length / 60 нормального имени нет вовсе. Псевдонимы позволяют управлять заголовками результата.
Что такое псевдоним столбца?
Псевдоним столбца задаёт временное имя столбцу в результате запроса SELECT. Сам столбец в таблице не меняется: псевдоним существует только в выводе этого запроса.
Базовый синтаксис
SELECT column_name AS alias_name
FROM table_name;
Ключевое слово AS необязательно, поэтому запись SELECT column_name alias_name тоже работает. С явным AS запрос читается легче: псевдоним не выглядит как второй столбец.
Переименование столбца
SELECT title AS film_title,
rental_rate AS price
FROM film;
Результат: все фильмы с двумя столбцами film_title и price вместо title и rental_rate.
Псевдонимы с пробелами
Если псевдоним содержит пробелы или специальные символы, заключите его в двойные кавычки:
SELECT first_name AS "Given Name",
last_name AS "Surname"
FROM actor;
Результат: список актёров с заголовками столбцов «Given Name» и «Surname».
Двойные кавычки - это стандарт SQL. MySQL и MariaDB также принимают обратные апострофы (`Given Name`), а SQL Server - квадратные скобки ([Given Name]). На практике короткие имена без пробелов, например given_name, удобнее использовать дальше в запросе.
Псевдонимы для вычисляемых столбцов
Когда столбец вычисляется из выражения, база данных формирует заголовок из текста выражения, например length / 60. Псевдоним даёт ему нормальное имя:
SELECT title,
length AS length_minutes,
length / 60 AS length_hours,
rental_rate * rental_duration AS full_rental_cost
FROM film;
Результат: каждый фильм с длительностью в минутах и часах и стоимостью аренды на весь срок.
Вычисляемые столбцы - самая частая причина использовать псевдонимы: без них результат трудно читать, а приложения, которые читают результат по именам столбцов, не могут найти значение.
Где можно использовать псевдоним
Псевдоним создаётся в списке SELECT, поэтому он доступен только в тех частях запроса, которые обрабатываются после SELECT:
| Предложение | Можно использовать псевдоним? |
|---|---|
ORDER BY | Да, во всех основных СУБД |
WHERE | Нет: WHERE обрабатывается до SELECT |
GROUP BY, HAVING | Зависит от СУБД (MySQL и PostgreSQL разрешают в GROUP BY) |
SELECT title, rental_rate * rental_duration AS full_rental_cost
FROM film
ORDER BY full_rental_cost DESC;
Результат: фильмы, отсортированные от самой дорогой полной аренды к самой дешёвой.
Если запрос должен работать в нескольких СУБД, в WHERE, GROUP BY и HAVING повторяйте выражение вместо псевдонима. Подробнее о порядке обработки - в уроке 2.7.
Ключевые выводы:
- Псевдоним столбца - временное имя столбца в результате запроса; таблица не меняется.
- Записывайте псевдонимы с
AS:SELECT title AS film_title. Ключевое слово необязательно, но улучшает читаемость. - Псевдонимы с пробелами заключайте в двойные кавычки:
AS "Given Name". - Давайте псевдоним каждому вычисляемому столбцу.
- Псевдоним можно использовать в
ORDER BY, но не вWHERE.
Часто задаваемые вопросы
Обязательно ли ключевое слово AS для псевдонима в SQL?
Нет. SELECT title film_title работает так же, как SELECT title AS film_title. Использовать AS рекомендуется: так видно, где заканчивается столбец и начинается псевдоним.
Почему нельзя использовать псевдоним столбца в WHERE?
WHERE обрабатывается до SELECT, поэтому в момент фильтрации строк псевдонима ещё не существует. Повторите выражение в WHERE или используйте псевдоним в ORDER BY, который обрабатывается после SELECT.
Переименовывает ли псевдоним столбец в таблице?
Нет. Псевдоним влияет только на результат текущего запроса. Чтобы переименовать столбец в самой таблице, используйте ALTER TABLE ... RENAME COLUMN.