Выбор колонок и алиасы (AS)
Выбор колонок и алиасы (AS)
В предыдущем уроке вы разобрали структуру SQL-запроса и научились использовать SELECT * для получения всех колонок. Звёздочка удобна для быстрого исследования, но в реальных задачах вы почти никогда не хотите получить буквально всё. В этом уроке разберём, как указывать конкретные колонки и давать им читаемые псевдонимы с помощью ключевого слова AS.
Выбор конкретных колонок
Вместо звёздочки можно перечислить имена нужных колонок через запятую:
SELECT name, salary
FROM employees;
Результат содержит только две колонки — name и salary. Остальные колонки таблицы (например, id, department, hire_date) не попадают в результат. Это важно по нескольким причинам:
- Производительность: СУБД не тратит время на передачу ненужных данных
- Ясность: читатель запроса сразу видит, какие данные вас интересуют
- Безопасность: вы не рискуете случайно вернуть конфиденциальные поля
Порядок колонок в SELECT определяет порядок колонок в результате. Если написать SELECT salary, name, в результате сначала будет salary, потом name — независимо от того, как они расположены в таблице.
Покажем на примере. Предположим, есть таблица products:
id | name | price | stock | category
---+-------------+-------+-------+---------
1 | Ноутбук | 55000 | 12 | Электроника
2 | Мышь | 1200 | 150 | Периферия
3 | Монитор | 28000 | 8 | Электроника
Запрос для отображения только названий и цен:
SELECT name, price
FROM products;
Результат:
name | price
---------+-------
Ноутбук | 55000
Мышь | 1200
Монитор | 28000
Псевдонимы колонок: ключевое слово AS
Иногда имя колонки в таблице не подходит для отображения: слишком техническое, на английском, или просто неудобное. Псевдоним (alias) позволяет переименовать колонку в результате запроса — без изменения самой таблицы.
Синтаксис: имя_колонки AS псевдоним:
SELECT name AS название, price AS цена
FROM products;
Результат:
название | цена
---------+------
Ноутбук | 55000
Мышь | 1200
Монитор | 28000
Псевдоним виден только в result set — таблица products на диске не изменилась. Это чисто косметическая операция.
Слово AS можно опустить — PostgreSQL поймёт и без него:
SELECT name название, price цена
FROM products;
Результат тот же. Но использование AS считается хорошей практикой: запрос становится явнее и читается как «верни name КАК название».
Проверь себя: изменит ли AS данные в таблице products на диске?
Псевдонимы с пробелами и специальными символами
Если псевдоним содержит пробелы или начинается с цифры, его нужно взять в двойные кавычки:
SELECT name AS "Название товара",
price AS "Цена (руб.)",
stock AS "В наличии"
FROM products;
Результат:
Название товара | Цена (руб.) | В наличии
----------------+-------------+----------
Ноутбук | 55000 | 12
Мышь | 1200 | 150
Монитор | 28000 | 8
Двойные кавычки — для имён объектов (таблицы, колонки, псевдонимы). Одинарные кавычки — для строковых значений. Это разные вещи, и путать их нельзя.
Зачем нужны псевдонимы в реальной работе
Псевдонимы — не просто косметика. Есть несколько практических причин их использовать:
Читаемость результата: emp_first_nm в базе — неочевидно для конечного пользователя. AS "Имя сотрудника" решает проблему.
Сокращение длинных имён: если колонка называется total_order_amount_including_tax, писать её имя несколько раз неудобно.
Вычисляемые колонки: когда вы вычисляете что-то в SELECT (арифметика, конкатенация), результат по умолчанию не имеет имени или получает автогенерированное. Псевдоним даёт ему осмысленное название:
SELECT name, price * 1.2 AS price_with_vat
FROM products;
О вычислениях в SELECT подробнее поговорим в уроке про литералы и выражения.
Порядок колонок в результате
Порядок колонок в SELECT-списке определяет порядок в результате. Это даёт возможность «переставить» колонки местами без изменения таблицы:
SELECT price, name, stock
FROM products;
Результат:
price | name | stock
------+---------+------
55000 | Ноутбук | 12
1200 | Мышь | 150
28000 | Монитор | 8
Таблица в базе осталась прежней — id, name, price, stock, category. Но в result set колонки расположены в том порядке, который вы указали.
Несколько таблиц: уточнение имени колонки
Когда в запросе участвуют несколько таблиц (это будет в модуле про JOIN), может оказаться, что у разных таблиц есть колонки с одинаковыми именами. Чтобы разрешить неоднозначность, имя колонки уточняется через точку: таблица.колонка:
SELECT products.name, products.price
FROM products;
В запросе с одной таблицей это избыточно, но привычка уточнять имена помогает в сложных запросах. Псевдоним таблицы тоже работает:
SELECT p.name, p.price
FROM products p;
Здесь p — псевдоним таблицы products. Это та же концепция псевдонима, только для таблицы, а не для колонки. Подробнее разберём, когда дойдём до JOIN.
Типичные ошибки при выборе колонок
1. Опечатка в имени колонки:
SELECT nane, price FROM products; -- ошибка: нет колонки "nane"
PostgreSQL ответит: ERROR: column "nane" does not exist.
2. Перечисление колонок через точку с запятой вместо запятой:
SELECT name; price FROM products; -- синтаксическая ошибка
В SELECT-списке разделитель — запятая, не точка с запятой.
3. Одинарные кавычки вместо двойных для псевдонима:
SELECT name AS 'название' FROM products; -- работает в MySQL, но не в PostgreSQL!
В PostgreSQL псевдонимы с пробелами — в двойных кавычках. Одинарные — для строк-значений.
Проверь себя: что вернёт запрос SELECT price, name FROM products? Чем он отличается от SELECT name, price FROM products?
Краткий итог
- Вместо
*можно перечислять конкретные колонки через запятую:SELECT col1, col2 FROM table - Порядок колонок в
SELECTопределяет порядок в результате AS псевдонимпереименовывает колонку в result set, не в таблице- Слово
ASможно опустить, но лучше писать явно - Псевдонимы с пробелами и спецсимволами — в двойных кавычках
- Разделитель колонок в
SELECT-списке — запятая
Практика: реальная таблица
Разберём пример приближенный к реальности. Допустим, в базе данных интернет-магазина есть таблица orders со следующими колонками: order_id, customer_id, created_at, status, total_amount, shipping_address. Вам нужно получить только номера заказов, их суммы и статусы:
SELECT order_id AS "№ заказа",
total_amount AS "Сумма",
status AS "Статус"
FROM orders;
Такой запрос вернёт ровно то, что нужно — три колонки с понятными заголовками. Клиент или аналитик, который получит этот результат, сразу поймёт, что перед ним: customer_id и shipping_address просто не попадут в вывод.
Обратите внимание: в SELECT-списке можно комбинировать колонки с псевдонимами и без них. order_id можно оставить как есть, если имя и так понятное:
SELECT order_id,
total_amount AS сумма,
status
FROM orders;
Такой смешанный стиль — норма. Псевдонимы ставятся там, где имя колонки неочевидно или нужен другой язык.
Разница между SELECT * и перечислением колонок
Когда использовать *, а когда перечислять колонки?
SELECT * удобен для:
- Быстрого исследования: «а что вообще есть в этой таблице?»
- Отладки и разработки, когда важно видеть все данные
Перечисление конкретных колонок лучше для:
- Продакшн-кода и приложений: фиксирует контракт
- Таблиц с большим числом колонок или тяжёлыми данными (blob-поля)
- Случаев, когда добавление новой колонки в таблицу не должно ломать запрос
Если таблица products однажды получит колонку description TEXT с многостраничным описанием, SELECT * начнёт вытягивать всю эту «тяжесть». Явный список колонок защищает от такого сюрприза.
Краткий итог
- Вместо
*можно перечислять конкретные колонки через запятую:SELECT col1, col2 FROM table - Порядок колонок в
SELECTопределяет порядок в результате AS псевдонимпереименовывает колонку в result set, не в таблице- Слово
ASможно опустить, но лучше писать явно - Псевдонимы с пробелами и спецсимволами — в двойных кавычках
- Разделитель колонок в
SELECT-списке — запятая SELECT *удобен для исследования; в продакшн-коде предпочтительнее явный список
Что дальше
Вы научились выбирать нужные колонки и давать им удобные имена. Следующий шаг — убрать из результата повторяющиеся строки с помощью SELECT DISTINCT. Это незаменимо, когда нужно узнать, какие уникальные значения встречаются в колонке.