Каверзные вопросы по SQL, которые могут застать врасплох

Кажется, что знаешь SQL, потому что умеешь писать JOIN, оконные функции и сложные запросы? А что, если на собеседовании тебя попросят не написать код, а объяснить, почему он работает именно так?

Собрала вопросы, которые могут встретиться на собеседовании, летсго:

Почему NULL = NULL не возвращает TRUE?

Можно ли написать LEFT JOIN, а в итоге получить результат как после INNER JOIN? Как так вообще получается?

В чём разница между COUNT(*) и COUNT(column)? Почему они могут вернуть разные числа?

Зачем нужен UNION ALL, если есть обычный UNION? И почему иногда первый вариант предпочтительнее?

Чем WHERE отличается от HAVING? Можно ли использовать их взаимозаменяемо?

В чём разница между ROW_NUMBER(), RANK() и DENSE_RANK()? Почему при одинаковых значениях они ведут себя по-разному?

Почему NOT IN иногда не находит ни одной строки, хотя кажется, что должен?

Если внутри запроса есть ORDER BY, почему итоговый результат всё равно может прийти в другом порядке?

Чем отличаются DELETE, TRUNCATE и DROP?

Индекс всегда ускоряет запросы?

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

Почему нельзя просто посчитать среднее от средних значений и получить правильный общий результат?

Чем ROWS отличается от RANGE в оконных функциях? Почему накопительная сумма иногда меняется сразу на нескольких строках?

Ну что, коллеги, готовим пост с правильными ответами? 🤩

Каверзные вопросы по SQL, которые могут застать врасплох | Сетка — социальная сеть от hh.ru Каверзные вопросы по SQL, которые могут застать врасплох | Сетка — социальная сеть от hh.ru