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

Запросы и операции

Все темы Systems Analyst

Какие виды JOIN запросов вы знаете?

В SQL существует несколько типов JOIN запросов:

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

  2. LEFT JOIN (или LEFT OUTER JOIN ): Возвращает все строки из левой таблицы и соответствующие строки из правой таблицы. Если нет соответствия, то значения в правой таблице будут NULL.

  3. RIGHT JOIN (или RIGHT OUTER JOIN ): Возвращает все строки из правой таблицы и соответствующие строки из левой таблицы. Если нет соответствия, то значения в левой таблице будут NULL.

  4. FULL JOIN (или FULL OUTER JOIN ): Возвращает все строки из обеих таблиц. Если нет соответствия, то значения будут NULL в соответствующей таблице.

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

Эти типы JOIN позволяют объединять данные из разных таблиц по определенным условиям, что является мощным инструментом для работы с реляционными базами данных.


Напишите JOIN для получения сотрудников и названий их отделов.

Даны две таблицы:

Таблица “Employees”:

  • employee_id

  • employee_name

  • department_id

Таблица “Departments”:

  • department_id

  • department_name

Напишите SQL-запрос для выбора всех сотрудников и названий их отделов, при условии, что у сотрудника указан department_id, который совпадает с department_id в таблице Departments.

SQL запрос:

SELECT e.employee_name, d.department_name
FROM Employees e
JOIN Departments d ON e.department_id = d.department_id;

Этот запрос соединяет таблицы Employees и Departments по department_id и выбирает имена сотрудников и названия их отделов.


Задача SQL. Дают таблицы. Напишите SELECT с такими-то условиями запроса (задача на GROUP BY).

Дана таблица “Orders”:

  • order_id

  • customer_id

  • order_date

  • order_amount

Напишите SQL-запрос для вычисления суммарного заказанного объема (order_amount) для каждого клиента (customer_id) за каждый год (используя год из столбца order_date).

SQL запрос:

SELECT customer_id, YEAR(order_date) AS order_year, SUM(order_amount) AS total_amount
FROM Orders
GROUP BY customer_id, YEAR(order_date);

Этот запрос группирует данные по customer_id и году заказа (извлеченному из столбца order_date), вычисляя общий заказанный объем (total_amount) для каждого клиента за каждый год.


Назовите все способы в SQL выбрать данные из первой таблицы, которых нет во второй таблице (NOT IN, NOT EXISTS и др).

В SQL существует несколько способов выбрать данные из первой таблицы, которых нет во второй таблице. Вот основные из них:

  1. NOT IN :
    SELECT column_list
    FROM table1
    WHERE column_name NOT IN (SELECT column_name FROM table2);

    NOT IN требует внимания к NULL: если подзапрос вернул NULL, несовпавшее сравнение может дать UNKNOWN, и строка не попадёт в WHERE. Для поиска отсутствующих совпадений часто проще использовать NOT EXISTS.

  2. NOT EXISTS :
    SELECT column_list
    FROM table1 t1
    WHERE NOT EXISTS (SELECT 1 FROM table2 t2 WHERE t2.column_name = t1.column_name);

    Этот способ использует предикат NOT EXISTS, который проверяет, существует ли подзапрос (в данном случае, совпадение по column_name в table2) и возвращает строки из table1, для которых подзапрос не вернул результат.

  3. LEFT JOIN с IS NULL :
    SELECT t1.column_list
    FROM table1 t1
    LEFT JOIN table2 t2 ON t1.column_name = t2.column_name
    WHERE t2.column_name IS NULL;

    Здесь используется LEFT JOIN для соединения table1 и table2 по column_name, и затем в WHERE условие проверяется, что вторая таблица не содержит совпадений (т.е., t2.column_name IS NULL).


Чем LEFT JOIN отличается от FULL JOIN?

В SQL операторы LEFT JOIN и FULL JOIN являются разновидностями операции объединения таблиц (JOIN). Основное различие между ними заключается в том, как они обрабатывают строки, которые не имеют совпадений между соединяемыми таблицами:

  1. LEFT JOIN (или LEFT OUTER JOIN ):
    • Возвращает все строки из левой таблицы (table1), включая строки, которые не имеют соответствия в правой таблице (table2).

    • Если для строки из table1 нет совпадающей строки в table2, то в результате соединения для table2 будут добавлены NULL значения.

    • По сути, LEFT JOIN сохраняет все строки из левой таблицы и соответствующие им строки из правой таблицы (если они есть).

    Пример:

    SELECT *
    FROM table1
    LEFT JOIN table2 ON table1.id = table2.id;
  2. FULL JOIN (или FULL OUTER JOIN ):
    • Возвращает все строки из обеих таблиц (table1 и table2), даже если для них нет соответствующих строк в другой таблице.

    • Если для строки из одной таблицы нет совпадающей строки в другой таблице, то в результате соединения для соответствующей таблицы будут добавлены NULL значения.

    Пример:

    SELECT *
    FROM table1
    FULL JOIN table2 ON table1.id = table2.id;

Таким образом, основное различие между LEFT JOIN и FULL JOIN заключается в том, что LEFT JOIN сохраняет все строки из левой таблицы, а FULL JOIN сохраняет все строки из обеих таблиц, даже если для них нет совпадающих строк в другой таблице.

Собеседования: Системный анализ

Смотри записи интервью, узнай, какие вопросы задают и как отвечают кандидаты.

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

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

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

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

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

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

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

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

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

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