Перейти к содержимому
На этой странице

Основы SQL

Все темы Product Analyst

Какие типы JOIN вы можете использовать в SQL, и в каких случаях каждый из них будет уместен?

В SQL существует несколько основных типов JOIN, каждый из которых используется в зависимости от требуемого результата:

  • INNER JOIN: Возвращает строки, когда условие совпадения выполнено для обеих таблиц. Используется, когда необходимы данные, присутствующие в обеих таблицах.

  • LEFT JOIN (или LEFT OUTER JOIN): Возвращает все строки из левой таблицы и сопоставленные строки из правой таблицы; если совпадение отсутствует, результат будет содержать NULL с правой стороны. Подходит для извлечения всех записей из одной таблицы независимо от наличия соответствий в другой.

  • RIGHT JOIN (или RIGHT OUTER JOIN): Аналогичен LEFT JOIN, но возвращает все строки из правой таблицы. Используется реже и может быть заменён LEFT JOIN с изменением порядка таблиц.

  • FULL JOIN (или FULL OUTER JOIN): Возвращает строки, когда есть совпадение в одной из таблиц. Если нет совпадения, то будет использовано NULL из таблицы, где совпадения нет. Используется для объединения результатов LEFT и RIGHT JOIN.

  • CROSS JOIN: Возвращает декартово произведение обеих таблиц, т.е. каждая строка одной таблицы соединяется со всеми строками другой таблицы. Используется, когда необходимо создать все возможные комбинации строк двух таблиц.


Напишите запрос SQL для выбора всех клиентов, у которых есть более одного заказа.

Этот запрос подсчитывает количество заказов для каждого клиента и выбирает тех, у кого их более одного.

SELECT customer_id, COUNT(order_id) AS num_orders
FROM orders
GROUP BY customer_id
HAVING COUNT(order_id) > 1;

Как вы оптимизируете SQL запросы для работы с большими объемами данных?

Использование индексов: Создание индексов по столбцам, которые часто используются в условиях WHERE, JOIN и ORDER BY.

Ограничение объема возвращаемых данных: Использование LIMIT и тщательный выбор только необходимых столбцов в SELECT.

Избегание подзапросов, где это возможно: Замена подзапросов соединениями, если это улучшает производительность.

Использование временных таблиц: Разделение сложных запросов на несколько простых с использованием временных таблиц может помочь улучшить читаемость и производительность.


Расскажите о различиях между WHERE и HAVING в SQL.

WHERE: Применяется до агрегации данных, фильтрует строки, выбираемые из базовой таблицы. Не может использоваться с агрегатными функциями.

HAVING: Применяется после агрегации данных, используется для фильтрации результатов агрегатных функций. Используется вместе с GROUP BY.


Как вы можете использовать оконные функции в SQL? Приведите пример.

Оконные функции позволяют выполнять вычисления на наборе строк, связанных с текущей строкой. Пример использования оконной функции для расчёта кумулятивной суммы продаж:

SELECT order_date, sales_amount,
       SUM(sales_amount) OVER (ORDER BY order_date) AS cumulative_sales
FROM sales;

Этот запрос покажет кумулятивную сумму продаж, начиная с первой даты в данных.


Объясните, что такое индекс в SQL и как он влияет на производительность запросов.

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


Как вы реализуете подзапросы в SQL? Дайте пример их использования.

Подзапросы позволяют включать результаты одного запроса в другой запрос. Пример использования подзапроса:

SELECT employee_id, name
FROM employees
WHERE department_id IN (SELECT department_id
                        FROM departments
                        WHERE location = 'New York');

Этот запрос выбирает сотрудников, работающих в отделах, расположенных в Нью-Йорке.

Вопросы и ответы

Не нашли ответ? Напишите мне в чат. Я делаю Шпаргалку и сам отвечаю на сообщения. Расскажите, что не работает или чего вам не хватает. Может, смогу сразу взять это в работу.

Откуда взяты вопросы?

Из реальных собеседований. Основой подборки стал опыт Вадима Новосёлова: он проходил интервью и записывал вопросы. Подробнее о материалах.

Насколько эти вопросы актуальны?

Эти вопросы встречались нам на реальных собеседованиях в 2025 году. Мы регулярно проходим собеседования и пополняем подборку новыми вопросами. Основы профессии и ключевые технологии остаются востребованными годами, а детали конкретных инструментов и версий стоит сверять с текущей документацией.

На какой уровень рассчитана подборка?

Мы проходили собеседования на вакансии уровня Middle+, а иногда и на Senior-позиции. Вопросы из этих интервью вошли в подборку. Направления работы: Продуктовый аналитик, Аналитик роста. Глубина обсуждения зависит от вакансии: будь готов объяснить основную идею, привести практический пример и разобрать ограничения и альтернативы решения.

Этот вопрос точно будет на моём собеседовании?

Гарантии нет: набор вопросов зависит от компании, задач команды, уровня вакансии и самого интервьюера. Эти вопросы уже встречались на реальных собеседованиях, но на твоём интервью ту же тему могут проверить другой формулировкой, практической задачей или обсуждением твоего опыта. Используй подборку, чтобы разобраться в теме: объясняй идею своими словами, приводи примеры и готовься обсудить ограничения и альтернативы решения. Так будет проще ответить и на знакомый вопрос, и на неожиданные уточнения.