Урок курса

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

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

Попробуйте AS без создания таблицы

Этот запрос можно выполнить в SQLite или PostgreSQL сразу: вместо чтения таблицы он возвращает два заданных значения.

SELECT 'Мышь' AS product_name, 1500 AS price;
product_nameprice
Мышь1500

AS задаёт название столбца в результате. Если заменить price на cost, изменится заголовок вывода, а значение 1500 останется тем же. При чтении настоящей таблицы псевдоним так же не переименовывает её столбец в базе.

В прошлом уроке вы написали первые запросы с явным перечислением столбцов. Теперь сравним такой список со звёздочкой и разберём, как менять заголовки результата с помощью 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, второй — название.

Задача 1

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

Выберите один вариант
Без регистрации · результат не сохраняется

Задача 2

Разработчик выполнил запрос SELECT title AS название, price AS цена FROM products;. После этого он написал новый запрос SELECT название FROM products; — и получил ошибку. Почему?

Выберите один вариант
Без регистрации · результат не сохраняется

Задача 3

В таблицу orders добавили новый столбец status. Какой запрос автоматически включит status в результат, а какой — нет?

Выберите один вариант
Без регистрации · результат не сохраняется

Задача 4

Какой запрос вернёт из products два столбца с заголовками «название» и «цена»?

Выберите один вариант
Без регистрации · результат не сохраняется

Задача 5

Витрина без служебных полей

Для витрины из таблицы products нужны только название и цена. В каждой проверке есть один товар. Верните title и price именно в таком порядке; не выводите служебные product_id и stock.

РешениеSQL · SQLite

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Задачи к уроку

Все задачи курса →

Продолжить с сохранением прогресса

Перейдите к уроку в учебном кабинете.

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