Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад

Как выглядит синтаксис CTE-запроса?

Вопрос проверяет знание синтаксиса Common Table Expressions (CTE) в SQL, что необходимо для написания сложных, структурированных и рекурсивных запросов.

Короткий ответ

CTE (Common Table Expression) — это временный именованный набор результатов, который можно использовать в основном запросе. Он определяется с помощью ключевого слова WITH. Основной синтаксис: WITH cte_name AS (SELECT ...) SELECT * FROM cte_name. CTE улучшает читаемость сложных запросов, разбивая их на логические части. Его также можно использовать для рекурсивных запросов, например, для обхода иерархических данных.

Длинный ответ

Common Table Expression (CTE) — это временный результат запроса, которому даётся имя, и который можно многократно ссылаться в рамках выполнения одного оператора SELECT, INSERT, UPDATE или DELETE. Основная цель CTE — улучшить читаемость и структурированность сложных SQL-запросов, особенно когда одна и та же подзадача используется несколько раз.

Базовый синтаксис CTE

CTE начинается с ключевого слова WITH, за которым следует имя CTE и необязательный список столбцов, а затем ключевое слово AS и подзапрос в скобках. После определения одного или нескольких CTE выполняется основной запрос, который может ссылаться на эти CTE как на обычные таблицы.

WITH cte_employee_summary AS (
    SELECT department_id, COUNT(*) as emp_count, AVG(salary) as avg_salary
    FROM employees
    GROUP BY department_id
)
SELECT d.name, es.emp_count, es.avg_salary
FROM departments d
JOIN cte_employee_summary es ON d.id = es.department_id
WHERE es.avg_salary > 50000;

Рекурсивные CTE

Особенно мощной возможностью CTE является рекурсия, которая позволяет обрабатывать иерархические или древовидные данные, например, структуру подчинённых в организации или дерево категорий. Рекурсивный CTE состоит из двух частей, объединённых оператором UNION ALL: якорный член (начальная точка) и рекурсивный член.

WITH RECURSIVE category_path AS (
    -- Якорный член: выбираем корневые категории
    SELECT id, name, parent_id, name as path
    FROM categories
    WHERE parent_id IS NULL
    UNION ALL
    -- Рекурсивный член: присоединяем дочерние категории
    SELECT c.id, c.name, c.parent_id, CONCAT(cp.path, ' > ', c.name)
    FROM categories c
    INNER JOIN category_path cp ON c.parent_id = cp.id
)
SELECT * FROM category_path;

Применение и преимущества

CTE широко применяются для:

  • Упрощения сложных запросов, заменяя вложенные подзапросы.
  • Выполнения рекурсивных операций, которые сложно реализовать стандартным SQL.
  • Организации кода, когда промежуточный результат используется несколько раз в одном запросе (хотя в некоторых СУБД CTE может материализоваться, что влияет на производительность).

Вывод: CTE стоит применять для повышения читаемости и поддержки сложных SQL-запросов, особенно при работе с иерархическими данными или когда необходимо логически разделить этапы обработки данных в одном запросе.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    4

Навыки

  • SQL

Ключевые слова

#SQL

#CTE

#Common Table Expression

#WITH clause

#recursive query

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.