Урок курса

Столбцы, SELECT * и псевдонимы

SQL с нуля: бесплатный курс с практикой

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

SELECT *: что возвращает звёздочка и как это зависит от схемы таблицы

Звёздочка в части SELECT — это не «выбрать что-нибудь», а точная инструкция: вернуть все столбцы таблицы в том порядке, в котором они объявлены в её схеме. Порядок определяет не запрос, а то, как таблица была создана.

Если таблица products определена как (product_id, title, price), то запрос

SELECT * FROM products;

вернёт ровно три столбца — product_id, title, price — именно в этой последовательности. Написать SELECT * и получить столбцы в другом порядке невозможно без явного их перечисления.

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

Для быстрого осмотра таблицы SELECT * удобен именно этим: не нужно знать все имена заранее. Написал один запрос — увидел всё, что есть. Это типичный инструмент исследования: зашёл в незнакомую базу, хочешь понять, что вообще хранится в таблице.

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

Сравнение результата SELECT звёздочка со всеми четырьмя столбцами и SELECT name, price только с двумя выбранными столбцами
SELECT управляет столбцами результата

Явный список столбцов против SELECT *: надёжность при изменении схемы

Разница между SELECT * и явным списком проявляется, когда схема таблицы меняется. Пока products содержит product_id, title и price, два запроса возвращают одинаковый набор столбцов:

SELECT * FROM products;
SELECT product_id, title, price
FROM products;

Если в таблицу добавят новый столбец, первый запрос автоматически включит его в результат. Второй продолжит возвращать product_id, title и price, пока сами эти столбцы существуют и сохраняют свои имена. Явный список защищает именно от неожиданного расширения результата; удаление или переименование перечисленного столбца всё равно потребует исправить запрос.

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

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

Есть и преимущество для чтения. SELECT product_id, title, price FROM products сразу показывает, какие данные нужны. Чтобы понять результат SELECT *, придётся отдельно открыть схему таблицы.

Псевдоним AS: заголовок результата без переименования столбца в таблице

AS решает простую задачу: дать столбцу в результате запроса то имя, которое удобно вам, не трогая при этом таблицу.

SELECT title AS название, price AS цена FROM products;

Результат этого запроса будет содержать два столбца с заголовками название и цена. Данные те же, что в таблице, — изменились только подписи. Столбец product_id в результат не попал: он не указан в SELECT.

Ключевой момент — область действия псевдонима. Он существует только внутри текущего запроса и только в его результате. Как только запрос выполнен, псевдоним исчезает. В таблице products столбец по-прежнему называется title, и следующий запрос обязан использовать именно это имя:

SELECT title FROM products;   -- правильно
SELECT название FROM products; -- ошибка: no such column: название

Это частая ловушка: после запроса с AS кажется, что столбец «теперь называется иначе». Нет — база данных не получила никакой команды на переименование, она лишь отобразила результат с другим заголовком.

AS особенно полезен, когда имя столбца в таблице техническое или неудобное для восприятия, а результат нужно показать человеку. Можно задать псевдоним на русском, с пробелом (тогда его берут в кавычки: AS "стоимость товара"), или просто сделать имя короче и понятнее.

Псевдоним можно присвоить каждому столбцу в списке независимо. Столбцы без AS сохраняют исходные имена из таблицы:

SELECT product_id, title AS название FROM products;

Здесь первый столбец результата называется product_id, второй — название.

Попробуйте решить

Таблица customers содержит столбцы customer_id, name, email. Какой результат вернёт запрос SELECT * FROM customers;?

Продолжить с проверкой и прогрессом

Откройте интерактивный раннер с заданиями урока.

Перейти к интерактивному уроку