Рассмотрим простой пример использования Common Table Expression (CTE) с операцией JOIN в PostgreSQL.
Предположим, у нас есть две таблицы: employees (сотрудники) и departments (отделы). Таблица employees содержит информацию о сотрудниках, а departments — о отделах, в которых они работают.
Таблица employees:
- emp_id (идентификатор сотрудника)
- name (имя сотрудника)
- dept_id (идентификатор отдела)
Таблица departments:
- dept_id (идентификатор отдела)
- dept_name (название отдела)
Мы хотим получить список всех сотрудников, работающих в отделе IT, включая название их отдела. Для этого мы можем использовать CTE для извлечения интересующих нас отделов, а затем выполнить JOIN с таблицей сотрудников, чтобы получить нужную информацию.
WITH ITDepartments AS (
SELECT dept_id
FROM departments
WHERE dept_name = 'IT'
)
SELECT e.name, d.dept_name
FROM employees e
JOIN ITDepartments d ON e.dept_id = d.dept_id;
В этом запросе CTE ITDepartments выбирает все идентификаторы отделов, название которых соответствует «IT». Затем основной запрос соединяет таблицу employees с CTE ITDepartments по полю dept_id, чтобы выбрать только тех сотрудников, которые работают в отделе IT. В результате запрос вернёт таблицу с именами сотрудников и наименованием их отдела, что в данном случае будет «IT».
Этот пример демонстрирует, как CTE можно использовать для структурирования сложных запросов и делания их более читаемыми и удобными для анализа. CTE особенно полезны в случаях, когда нужно выполнить несколько последовательных операций с данными перед их объединением с другими данными.