Выбор колонок и алиасы (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. Это незаменимо, когда нужно узнать, какие уникальные значения встречаются в колонке.

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике