Собеседование по SQL: 15 вопросов, которые задают почти всегда
· 6 мин чтения СтатьяКарьера

Собеседование по SQL: 15 вопросов, которые задают почти всегда

Разбор типовых вопросов на собеседовании по SQL для аналитиков и тестировщиков: JOIN, GROUP BY, NULL, подзапросы, оконные функции — с короткими ответами.

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

Основы: здесь отсеивают

1. Чем WHERE отличается от HAVING? WHERE фильтрует строки до группировки, HAVING — группы после неё. «Клиенты с суммой заказов больше ста тысяч» — это HAVING, потому что сумма появляется только после GROUP BY.

2. Что вернёт WHERE price = NULL? Ничего. NULL не равен ничему, даже самому себе; проверять надо через IS NULL. Этот вопрос ловит тех, кто учил SQL по картинкам.

3. Как COUNT(*) отличается от COUNT(столбец)? Первый считает строки, второй — строки, где столбец не NULL. На таблице с пропусками результаты разные.

4. В каком порядке выполняются части запроса? FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY, LIMIT. Отсюда следует, что псевдоним из SELECT нельзя использовать в WHERE — его ещё не существует.

5. Зачем DISTINCT и чем он опасен? Убирает повторы. Опасен тем, что прячет ошибку соединения: если после JOIN строки задвоились, DISTINCT сделает результат «красивым», а причина останется.

Соединения: главная тема

6. Чем INNER JOIN отличается от LEFT JOIN? Внутреннее оставляет только пары, у которых нашлось совпадение с обеих сторон. Левое сохраняет все строки левой таблицы, а справа подставляет NULL там, где пары нет. «Клиенты без заказов» — это LEFT JOIN плюс WHERE orders.id IS NULL.

7. Что произойдёт, если соединить таблицы без условия? Декартово произведение: каждая строка с каждой. Сто клиентов и тысяча заказов дадут сто тысяч строк. Так проверяют, понимаете ли вы, что JOIN — это не магия.

8. Почему после JOIN сумма выросла вдвое? Потому что у одной строки слева нашлось несколько справа, и она размножилась. Считать надо до соединения — в подзапросе, — либо группировать по ключу левой таблицы.

9. Как соединить таблицу саму с собой? Через псевдонимы: сотрудники и их руководители лежат в одной таблице, и запрос пишется как FROM employees e JOIN employees m ON e.manager_id = m.id.

Подзапросы и оконные функции

10. Товары дороже среднего — как? Подзапрос в WHERE: WHERE price > (SELECT AVG(price) FROM products). Уточняющий вопрос: а дороже среднего по своей категории? Это уже коррелированный подзапрос или оконная функция.

11. Что такое оконная функция и чем она отличается от GROUP BY? GROUP BY схлопывает строки в группы, оконная функция считает по группе, но строки оставляет. «Доля заказа в сумме клиента» — окно; «сумма по клиенту» — группировка.

12. Как взять последний заказ каждого клиента? ROW_NUMBER() OVER (PARTITION BY client_id ORDER BY created_at DESC), потом фильтр по номеру 1. Ответ через MAX и повторное соединение тоже примут, но окно короче.

13. В чём разница между RANK и DENSE_RANK? При одинаковых значениях RANK пропускает номера (1, 1, 3), DENSE_RANK — нет (1, 1, 2).

Про базу в целом

14. Зачем нужен индекс и когда он вредит? Ускоряет поиск по столбцу, но замедляет вставку и занимает место. Индекс на столбце с тремя значениями почти бесполезен.

15. Что такое транзакция? Группа операций, которая либо выполняется целиком, либо не выполняется вовсе. Перевод денег: списать с одного счёта и зачислить на другой — либо оба действия, либо ни одного.

Как готовиться, чтобы не забыть на месте

Список выше — это карта, а не подготовка. Подготовка — это когда пальцы сами пишут LEFT JOIN, пока голова думает о задаче. Для этого нужна практика на разных данных, а не на одной учебной таблице из книжки.

  • Пройдите разделы про соединения и группировку в курсе SQL: там ответ сверяется с эталонной таблицей, и «почти правильно» не засчитывается — как и на собеседовании.
  • За неделю до встречи решайте по десять задач в день в тренажёре: он даёт случайные задания и показывает, где вы стабильно ошибаетесь.
  • Прочитайте одно расследование до конца: там задачи без подсказок, как на живом собеседовании, где интервьюер молчит и ждёт.

И последнее. Если вопрос непонятен, переспросите: «вы про порядок выполнения или про синтаксис?». Уточняющий вопрос оценивают выше, чем уверенный ответ мимо.

Тренажёр SQL: задачи с проверкой Случайные задания разной сложности, ответ сверяется с эталоном.
Открыть тренажёр
Поделиться: Telegram ВКонтакте

Ещё в блоге

СтатьяДетям Финансовая грамотность для подростка: как научить копить, а не запрещать тратить Как объяснить ребёнку деньги без нотаций: карманные деньги по правилам, правило трёх кучек, первая цель, карта и мошенники — план для родителей детей 8–15 лет. · 6 мин чтения СтатьяПрактика Учить SQL через детективные задачи: почему расследования работают лучше упражнений Как устроены SQL-расследования: улики в таблицах, каждый шаг — запрос, подсказок нет. Почему такой формат закрепляет язык запросов лучше учебных упражнений и с какого дела начать. · 5 мин чтения Статья 1С с нуля: какие профессии вокруг неё есть и с чего начать без опыта Что такое 1С на самом деле, чем занимаются оператор, бухгалтер, аналитик и программист 1С, сколько времени нужно на первый уровень и с какого курса начать. · 5 мин чтения СтатьяИИ Что такое промпт и как разговаривать с нейросетью, чтобы получать ответ с первого раза Простое объяснение, что такое промпт, из чего состоит хороший запрос к ИИ и пять правил, после которых ChatGPT, Claude и другие модели перестают отвечать «водой». · 5 мин чтения