8 популярных вопросов по теории SQL с собеседований
Все привыкли видеть задачки на SQL на собеседованиях. Но вместо задач, либо в дополнение к ним, можно встретить и вопросы на понимание теории SQL.
Предлагаю сегодня потренироваться на таких вопросах.
1. В чем отличие PARTITION BY и GROUP BY?
GROUP BY используется для агрегации данных по определённым колонкам на уровне всего запроса. Пишется после условия WHERE в запросе.
PARTITION BY не группирует строки, а просто разделяет их на «разделы». Указывается в условии OVER() при использовании оконных функций.
GROUP BY уменьшает количество строк. А вот PARTITION BY не меняет их количество, но добавляет новый столбец.
2. В чем отличие WHERE и HAVING?
WHERE фильтрует строки до группировки, работает с отдельными строками. Указывается сразу после FROM или JOIN, если используется.
HAVING фильтрует группы строк после группировки (GROUP BY). Работает с агрегатными функциями. Указывается после условия GROUP BY.
3. В чем разница между INNER JOIN и LEFT JOIN?
INNER JOIN возвращает только строки, у которых есть совпадения по ключу в обеих таблицах.
LEFT JOIN возвращает все строки из левой таблицы, даже если нет совпадений в правой. Для отсутствующих в правой таблице значений возвращаются NULL.
4. Как работает UNION и чем отличается от UNION ALL?
UNION объединяет результаты двух запросов и удаляет дубликаты.
UNION ALL объединяет результаты двух запросов, но не удаляет дубликаты, возвращая все строки.
5. Как можно удалить дубликаты строк в SQL?
Для этого в запросе используется оператор DISTINCT, который оставляет только уникальные строки.
6. Что такое подзапросы и когда их следует использовать?
Подзапросы (subqueries) — это вложенные запросы внутри основного запроса, которые возвращают данные для использования в условиях фильтрации, агрегации или других операций.
Следует использовать, например, когда:
- Нужно отфильтровать данные на основе другого запроса;
- Требуется использовать агрегатные значения;
- Проверяется наличие данных через
EXISTS; - Операции обновления или удаления зависят от других таблиц.
Также в некоторых случаях они помогают делать запрос более читаемым.
7. Карточка 7/8 в загрузке отсутствует.
8. Как получить дробное значение при делении 2 целочисленных?
Ответ на этот вопрос сильно зависит от конкретной СУБД.
Чаще всего, одно из чисел нужно явно привести к типу с плавающей запятой, например DECIMAL или FLOAT:
SELECT CAST(a AS FLOAT) / bFROM tableГотовишься к собеседованию на аналитика?
Посмотри базу реальных тестовых заданий и разборы кейсов.