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

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

Ответ

Звёздочка (*) в запросе SELECT * — это специальный символ, означающий "все столбцы таблицы (или всех таблиц в JOIN)".

Пример:

-- Выбрать все столбцы из таблицы 'users'
SELECT * FROM users;

Когда это может быть оправдано:

  • Ад-hoc анализ или быстрое изучение структуры таблицы.
  • Запросы в консоли для разовых проверок.

Почему SELECT * считается плохой практикой в продакшене:

  1. Избыточность данных: Запрос получает все столбцы, включая потенциально тяжелые (BLOB, TEXT), что увеличивает нагрузку на сеть и память.
  2. Хрупкость кода: Структура таблицы может измениться (добавлены/удалены столбцы), что сломает логику приложения, ожидающую определенный порядок или набор полей.
  3. Снижение читаемости: Непонятно, какие именно данные используются.
  4. Проблемы с JOIN: При соединении таблиц с одинаковыми именами столбцов возникнут конфликты.

Рекомендуемая best practice — явное перечисление столбцов:

-- Хорошо: явный список
SELECT id, username, email, created_at
FROM users
WHERE is_active = TRUE;

-- Плохо: использование *
SELECT *
FROM users
WHERE is_active = TRUE;

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