Назад к вопросам
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;
Это помогает структурировать запросы и упрощает поддержку кода.