Вопрос проверяет понимание разницы между JOIN и подзапросами в SQL, а также умение выбирать оптимальный подход для производительности и читаемости запросов.
JOIN и подзапросы — два способа объединить данные из нескольких таблиц в SQL. JOIN физически соединяет строки таблиц по условию, создавая временную таблицу. Подзапрос — это вложенный запрос, результат которого используется во внешнем запросе, например, в WHERE или FROM.
Современные СУБД часто оптимизируют подзапросы до JOIN, но не всегда. JOIN обычно выполняется быстрее, так как позволяет базе данных использовать индексы и более эффективные алгоритмы соединения. Подзапросы могут выполняться для каждой строки внешнего запроса, что замедляет работу на больших объёмах данных.
Найдём сотрудников, чья зарплата выше средней:
-- Подзапрос
SELECT name FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
-- JOIN (с агрегацией)
SELECT e.name FROM employees e
JOIN (SELECT AVG(salary) AS avg_sal FROM employees) avg_t
ON e.salary > avg_t.avg_sal;Оба запроса дают одинаковый результат, но JOIN может быть эффективнее, если средняя зарплата вычисляется один раз.
Вывод: В большинстве случаев JOIN предпочтительнее для производительности, но подзапросы удобны для простых фильтров. Тестируйте оба варианта на реальных данных, чтобы выбрать оптимальный.