Программы
Подготовка к собеседованиямA/B-тесты для аналитиковML и Causal InferenceA/B-тесты для менеджеровОбучение для командБаза знанийОтзывыО проектеОставить заявку
SQL

Вопросы от HR

Что проверяет: теория SQL: join, null, order by, порядок выполнения, оконки

Условие

8 вопросов по SQL, которые задают прямо на HR-скрининге в один банк

Уверены в своих теоретических знаниях по SQL настолько, что прошли бы на следующий этап собеседования?

Уделите карточкам выше буквально 5 минут и проверьте себя!

И не подглядывайте в мой вариант ответа, пока не проговорите свой.

А я вернусь с новым разбором вопросов и заданий с реальных собеседований уже на следующей неделе.

1. Может ли измениться результат таблицы, если в LEFT JOIN поменять таблицы местами?

Да, если у таблиц есть не пересекающиеся значения ключей.

В запросе с LEFT JOIN возвращаются все строки из левой таблицы и соответствующие строки из правой таблицы. Если в правой таблице нет соответствующих записей, результат будет содержать NULL для столбцов правой таблицы.

Если поменять местами таблицы, то изменится и то, какая таблица становится левой, а какая — правой. Это и может привести к изменению результата.

Результат смены мест таблицы будет аналогичен результату работы RIGHT JOIN.

2. Сколько будет 5 + NULL?

Результатом сложения числа с NULL-значением будет NULL.

NULL представляет неизвестное или отсутствующее значение. Поэтому любая математическая операция с ним будет давать неизвестное или отсутствующее значение.

3. Можно ли делать JOIN таблицы саму на себя?

Да. Такой тип соединений называется SELF JOIN.

Так тип, к примеру, может использоваться для работы с иерархическими данными (выявление отношений между сотрудником и его менеджером в рамках одной таблицы) или для сравнения строк в таблице (например, для поиска дубликатов).

4. Может ли ORDER BY приводить к уменьшению числа строк в результате выполнения?

Нет.

ORDER BY используется исключительно для сортировки строк по указанным столбцам в возрастающем или убывающем порядке.

Количество строк в результате остается таким же, как и до применения ORDER BY.

5. При каких типах соединения условие из WHERE можно перенести в ON с гарантированным сохранением результата запроса?

Для соединений типа INNER JOIN.

Если добавить дополнительное условие в ON, оно просто исключит строки, не удовлетворяющие этому условию, до того, как результат будет возвращен.

Для LEFT JOIN и RIGHT JOIN, например, если условие помещено в WHERE, оно может отфильтровать строки с NULL значениями, что не произойдет, если условие включено в ON. Поэтому перемещение условий из WHERE в ON в этих типах соединений изменит результат.

6. Какой из операторов SELECT, FROM, WHERE, GROUP BY будет выполняться последним при обработке запроса?

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

FROM
JOIN
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
LIMIT

Соответственно, из перечисленных операторов, последним будет выполняться SELECT.

7. Какие функции умеют возвращать значения из предыдущих/последующих строк для заданной строки таблицы?

Такие значения могут возвращать оконные функции LAG() — для предыдущего значения, и LEAD() — для последующего.

8. Какое минимальное и максимальное значение может выдать FULL JOIN таблицы на 10 строк с таблицей на 100 строк?

Минимум — 100 строк, если для каждой строки из первой таблицы есть одна соответствующая во второй таблице.

Максимум — 1000 строк, если каждой строке из первой таблицы соответствует каждая строка из второй таблицы.

Оригинал в Telegram →