SELECT и проекция столбцов · 12 мин
🎯 Цель урока

Студент сможет написать простой SELECT-запрос, выбрав только нужные столбцы из таблицы, и объяснить, почему SELECT * опасен в тестовой работе.

Контекст

QA-инженер постоянно обращается к базе данных, чтобы проверить, сохранились ли данные после действий пользователя. Умение точно указать, какие столбцы вам нужны, ускоряет работу и делает результат читаемым. Если запрашивать всё подряд через SELECT *, результат засоряется лишними колонками, а при росте схемы запрос молча начинает возвращать новые столбцы — это ломает скриптовые проверки.

  • SELECT используется каждый раз, когда нужно считать данные из таблицы.
  • Явное перечисление столбцов документирует намерение: «нам важны именно эти поля».
  • Конкретный список колонок защищает автотесты от добавления новых столбцов в схему.

Рабочий алгоритм

Чтобы написать корректный SELECT с проекцией, придерживайтесь следующего порядка:

  • Определите таблицу: FROM <table> — с неё начинает читать движок базы данных.
  • Перечислите только нужные столбцы после SELECT через запятую: id, email, status.
  • Проверьте результат: убедитесь, что в выводе ровно те колонки, которые вы ожидаете, — ни больше, ни меньше.

Пример из практики

Сценарий: после регистрации нового пользователя нужно убедиться, что в таблице users создалась запись с корректным email и статусом active. Тестировщик выполняет запрос: SELECT id, email, status FROM users WHERE email = 'qa_test_user@example.com'; Результат содержит одну строку: id=1042, email='qa_test_user@example.com', status='active'. Это подтверждает, что бизнес-логика регистрации отработала корректно и лишних данных (пароль, внутренние флаги) в выводе нет.

Частые ошибки

Начинающие QA нередко попадают в ловушки при написании первых SELECT-запросов:

  • SELECT * в автотесте — при добавлении нового столбца в таблицу сравнение строк начинает падать без очевидной причины.
  • Опечатки в именах столбцов возвращают ошибку 'column does not exist'; всегда проверяйте схему через \d <table> или information_schema.
  • Забытая запятая между столбцами приводит к синтаксической ошибке; читайте сообщение — СУБД точно указывает позицию.

Самопроверка

1Почему SELECT * считается плохой практикой в автотестах?
При добавлении нового столбца в таблицу SELECT * молча начинает его возвращать, что ломает сравнения в тестах, которые не ожидают этого столбца.
2В каком порядке логически выполняется SELECT-запрос: сначала SELECT или FROM?
Сначала FROM — движок определяет источник данных, затем SELECT фильтрует, какие столбцы включить в результат.
3Как быстро проверить список столбцов таблицы в PostgreSQL?
Выполните \d <table_name> в psql или запросите information_schema.columns WHERE table_name = '<table_name>'.
4Что произойдёт, если указать несуществующий столбец в SELECT?
СУБД вернёт ошибку вида 'column "xyz" does not exist' и не выполнит запрос.