CCareerLab
Главная/База знаний/Собеседование/Собеседование по SQL: вопросы для аналитиков и разработчиков
Собеседование
Новоеjunior

Собеседование по SQL: вопросы для аналитиков и разработчиков

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

Время чтения5 минут
Обновленомай 2026 г.
Уровеньjunior
Главная мысль
SQL вопросы на собеседовании с ответами: SELECT, JOIN, GROUP BY, оконные функции, индексы, транзакции. Для аналитиков данных и разработчиков.

SQL спрашивают на собеседовании у аналитиков данных, backend-разработчиков, QA и DevOps. Требования разные, но базовые вопросы одинаковые. Вот что реально задают.

Roadmap Data Analyst

Базовый SQL (вопросы 1–15)

1. Что такое SQL?
Structured Query Language — язык запросов к реляционным базам данных. DDL (CREATE, ALTER, DROP), DML (SELECT, INSERT, UPDATE, DELETE), DCL (GRANT, REVOKE).

2. Что такое первичный ключ (PRIMARY KEY)?
Уникальный идентификатор строки в таблице. Не может быть NULL. Автоматически создаёт индекс.

3. Что такое внешний ключ (FOREIGN KEY)?
Ссылка на PRIMARY KEY другой таблицы. Обеспечивает ссылочную целостность: нельзя добавить строку с несуществующим ID.

4. Чем WHERE отличается от HAVING?
WHERE фильтрует строки до агрегации. HAVING фильтрует группы после GROUP BY. `WHERE age > 18` — до группировки. `HAVING COUNT(*) > 5` — после.

5. Что такое JOIN? Виды?
Объединение таблиц по условию. INNER JOIN — только совпадающие строки. LEFT JOIN — все строки из левой + совпадающие из правой (NULL если нет совпадения). RIGHT JOIN — обратно. FULL OUTER JOIN — все из обеих.

6. Что даст LEFT JOIN с условием IS NULL?
Строки из левой таблицы, для которых нет совпадения в правой. Используется для поиска «сирот»: `WHERE right_table.id IS NULL`.

7. Что такое GROUP BY?
Группировка строк по значению одного или нескольких полей. С агрегатными функциями: `COUNT, SUM, AVG, MIN, MAX`.

8. Что такое DISTINCT?
Убирает дублирующиеся строки из результата. `SELECT DISTINCT city FROM users`.

9. Что такое подзапрос (subquery)?
Запрос внутри другого запроса. Может быть в SELECT, FROM (inline view), WHERE, HAVING. Коррелированный подзапрос ссылается на внешний запрос.

10. Что такое CTE (Common Table Expression)?
Именованный подзапрос через WITH: `WITH cte AS (SELECT ...) SELECT * FROM cte`. Улучшает читаемость, используется для рекурсивных запросов.

11. Что такое UNION и UNION ALL?
Объединяют результаты нескольких SELECT. UNION убирает дубликаты (медленнее). UNION ALL сохраняет все строки (быстрее).

12. Как работает ORDER BY?
Сортирует результат. `ASC` — по возрастанию (по умолчанию). `DESC` — по убыванию. Можно сортировать по нескольким полям.

13. Что такое NULL в SQL?
Отсутствие значения. NULL не равен ничему, даже NULL: `NULL = NULL` → false. Проверка: `IS NULL` или `IS NOT NULL`. Функции: `COALESCE(a, b)` — первое не-NULL значение.

14. Что делает `CASE WHEN`?
Условное выражение в SQL: `CASE WHEN score >= 90 THEN 'A' WHEN score >= 80 THEN 'B' ELSE 'C' END`. Аналог `if/else`.

15. Что такое `LIMIT` и `OFFSET`?
`LIMIT n` — вернуть не более n строк. `OFFSET n` — пропустить n строк. Используется для пагинации.

Оконные функции и продвинутый SQL (вопросы 16–25)

16. Что такое оконные функции?
Функции, работающие над набором строк, не сворачивая их в одну. Используют `OVER(PARTITION BY ... ORDER BY ...)`. Не изменяют количество строк, в отличие от GROUP BY.

17. Что такое `ROW_NUMBER()`?
Присваивает уникальный номер каждой строке в разделе. `ROW_NUMBER() OVER (PARTITION BY dept ORDER BY salary DESC)` — нумерация сотрудников по зарплате в каждом отделе.

18. Чем `RANK()` отличается от `DENSE_RANK()`?
`RANK()` — одинаковые значения получают одинаковый ранг, следующий ранг пропускается (1,1,3). `DENSE_RANK()` — ранги не пропускаются (1,1,2).

19. Что такое `LAG()` и `LEAD()`?
`LAG(col, n)` — значение предыдущей строки на n позиций. `LEAD(col, n)` — следующей. Используются для вычисления изменений: рост продаж к прошлому периоду.

20. Что такое `SUM() OVER()`?
Нарастающая сумма: `SUM(amount) OVER (ORDER BY date)` — накопленная сумма по дате. Или по разделу: `SUM(sales) OVER (PARTITION BY region)` — сумма по каждому региону для каждой строки.

21. Напишите запрос для топ-3 сотрудников по зарплате в каждом отделе.
```sql

WITH ranked AS (

SELECT *, DENSE_RANK() OVER (PARTITION BY dept ORDER BY salary DESC) AS rn

FROM employees

)

SELECT * FROM ranked WHERE rn <= 3;

```

22. Что такое `NTILE(n)`?
Делит строки на n примерно равных групп. `NTILE(4) OVER (ORDER BY score)` — квантили (квартили).

23. Как найти дубликаты в таблице?
```sql

SELECT email, COUNT(*) as cnt

FROM users

GROUP BY email

HAVING COUNT(*) > 1;

```

24. Как удалить дубликаты, оставив одну запись?
```sql

DELETE FROM users

WHERE id NOT IN (

SELECT MIN(id) FROM users GROUP BY email

);

```

25. Что такое `PIVOT` / `UNPIVOT`?
PIVOT — преобразование строк в столбцы. В PostgreSQL через `CASE WHEN` + `GROUP BY`. В MSSQL — через `PIVOT`. UNPIVOT — обратно.

Индексы, транзакции, оптимизация (вопросы 26–30)

26. Что такое индекс?
Структура данных, ускоряющая поиск строк. B-tree индекс — для сравнений. Hash — для точного равенства. Ускоряет SELECT, замедляет INSERT/UPDATE/DELETE.

27. Когда индекс не помогает?
Функция над индексированной колонкой: `WHERE YEAR(date) = 2024` (нет, нужно `WHERE date BETWEEN...`). `LIKE '%pattern'` — нет. Low cardinality (boolean поле) — не эффективен.

28. Что такое ACID?
Atomicity (атомарность), Consistency (согласованность), Isolation (изоляция), Durability (долговечность). Гарантии транзакций в РСУБД.

29. Что такое уровни изоляции транзакций?
READ UNCOMMITTED, READ COMMITTED (по умолчанию в PostgreSQL), REPEATABLE READ, SERIALIZABLE. Чем выше — тем меньше аномалий, тем больше блокировок.

30. Как оптимизировать медленный запрос?
`EXPLAIN ANALYZE` — посмотреть план выполнения. Добавить индекс на WHERE/JOIN колонки. Убрать `SELECT *`, выбирать только нужные поля. Переписать подзапрос как JOIN. Избегать функций в WHERE.

FAQ

Какую СУБД учить для аналитика?
PostgreSQL — open source, мощный, много вакансий. Знание одного SQL достаточно для перехода на другие диалекты.

Нужно ли SQL backend-разработчику?
Да, обязательно. Оконные функции и оптимизация — для senior, базовые JOIN — для junior.

---