Вопросы от 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 строк, если каждой строке из первой таблицы соответствует каждая строка из второй таблицы.