Что делает звёздочка (*) в SQL-запросе SELECT *?

«Что делает звёздочка (*) в SQL-запросе SELECT *?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Символ * (звёздочка)* в конструкции `SELECT ` является спецификатором, означающим "все столбцы"** таблицы или представления, указанного в FROM.

*Проблемы использования `SELECT ` в production:**

  1. Производительность: Сервер БД и сеть передают все данные, включая потенциально тяжелые (BLOB, TEXT) или ненужные для приложения столбцы.
  2. Стабильность: Структура таблицы может измениться (добавление/удаление/переименование столбцов). Явное перечисление столбцов делает запрос устойчивым к таким изменениям, если они не затрагивают выбранные поля.
  3. Читаемость: Непонятно, какие данные действительно используются в коде.

Рекомендация: Всегда явно перечисляйте необходимые столбцы.

-- Плохо
SELECT * FROM users;

-- Хорошо
SELECT id, username, email, created_at FROM users;

Исключением может быть ad-hoc анализ данных или случаи, когда логика приложения динамически работает со всеми столбцами (например, через рефлексию), но это редкие сценарии.