Sobes.tech
Назад к вопросам
Middle
4

Расскажите про SQL: какие JOIN используете, какой опыт с оконными функциями, CTE?

Компании, где спрашивали
Небольшая компания

Ответ от нейросети

sobes.tech AI

В SQL я часто использую разные типы JOIN для объединения таблиц:

  • INNER JOIN — возвращает только те записи, где есть совпадения в обеих таблицах.
  • LEFT JOIN (LEFT OUTER JOIN) — возвращает все записи из левой таблицы и совпадающие из правой, если нет совпадения — NULL.
  • RIGHT JOIN (RIGHT OUTER JOIN) — наоборот, все из правой и совпадающие из левой.
  • FULL OUTER JOIN — возвращает все записи из обеих таблиц, с NULL там, где нет совпадений.

Опыт с оконными функциями у меня есть, использую их для аналитики и агрегирования данных без группировки всего результата. Например, для подсчёта скользящих сумм, ранжирования или вычисления кумулятивных значений:

SELECT employee_id, department_id, salary,
       RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) as salary_rank
FROM employees;

CTE (Common Table Expressions) применяю для улучшения читаемости сложных запросов, особенно когда нужно разбить логику на части или сделать рекурсивные запросы:

WITH DepartmentSalaries AS (
    SELECT department_id, AVG(salary) as avg_salary
    FROM employees
    GROUP BY department_id
)
SELECT e.employee_id, e.salary, d.avg_salary
FROM employees e
JOIN DepartmentSalaries d ON e.department_id = d.department_id
WHERE e.salary > d.avg_salary;

Это помогает структурировать запросы и упрощает поддержку кода.