Самосоединения и псевдонимы
Соединяйте таблицу с самой собой с помощью псевдонимов, чтобы сравнивать строки внутри одной таблицы, например сотрудников и руководителей или даты и предыдущие даты
«Самосоединения и псевдонимы» — бесплатный урок SQL Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.
Самосоединение: соединение таблицы с самой собой
Иногда связь существует внутри одной таблицы:
- Сотрудники ↔ руководители: руководитель является сотрудником
- Вложенные комментарии: у каждого комментария есть parent_id
- Граф друзей: пользователь ↔ пользователь
Исходная структура
Таблица employees с внешним ключом, ссылающимся на эту же таблицу:
CREATE TABLE employees (
id BIGSERIAL PRIMARY KEY,
full_name TEXT NOT NULL,
manager_id BIGINT REFERENCES employees(id)
);Соединение сотрудников с их руководителями
Задайте для каждого экземпляра отдельный псевдоним:
SELECT e.full_name AS employee, m.full_name AS manager
FROM employees e
JOIN employees m ON m.id = e.manager_id;Без псевдонимов запрос не скомпилируется
Без псевдонимов невозможно понять, какой именно full_name имеется в виду. Каждая ссылка неоднозначна:
-- ERROR: column reference "full_name" is ambiguous
SELECT full_name FROM employees JOIN employees ON ...LEFT JOIN для сотрудников верхнего уровня
INNER-соединение исключает сотрудников без руководителя, например CEO. Используйте LEFT JOIN, чтобы сохранить их:
SELECT e.full_name AS employee, m.full_name AS manager
FROM employees e
LEFT JOIN employees m ON m.id = e.manager_id;Вложенные комментарии
Покажите каждый комментарий вместе с текстом его родительского комментария:
SELECT c.id, c.body, p.body AS parent_body
FROM comments c
LEFT JOIN comments p ON p.id = c.parent_id;Пары и комбинации
Найдите пары товаров, появлявшихся в одном заказе, без дублирования пар (A,B) и (B,A):
SELECT a.id AS product_a, b.id AS product_b
FROM order_items a
JOIN order_items b
ON a.order_id = b.order_id
AND a.product_id < b.product_id;Сравнение соседних строк
Самосоединение по предыдущей версии строки:
SELECT a.id, a.created_at, b.created_at AS prev_at
FROM events a
LEFT JOIN events b ON b.id = a.previous_id;Самосоединение и оконная функция
Во многих задачах, где нужно сравнить каждую строку с предыдущей, оконная функция (LAG) проще и быстрее самосоединения. Это рассматривается в уроке «Подробно об оконных функциях».
Рекурсивные самосоединения
Нужно пройти N уровней в глубину, например по организационной структуре или дереву обсуждения? Используйте рекурсивный CTE — это рассматривается в уроке «Подзапросы и CTE».
Индексация столбца FK
Всегда добавляйте индекс для столбца FK, ссылающегося на эту же таблицу. Без него при каждом поиске родителя соединение просматривает всю таблицу.
CREATE INDEX employees_manager_idx ON employees(manager_id);Повторение
Самосоединения позволяют обрабатывать связи внутри одной таблицы.
- Два псевдонима для двух виртуальных копий
LEFT JOIN, чтобы сохранить корневые и верхнеуровневые строки- Создайте индекс для столбца
FK - Оконные функции могут упростить шаблоны с «предыдущей строкой»
Быстрая проверка
Вы соединяете таблицу employees с самой собой, чтобы найти руководителя каждого сотрудника. Почему необходимы псевдонимы?
Часто задаваемые вопросы
Урок «Самосоединения и псевдонимы» бесплатный?
Да — полный текст урока «Самосоединения и псевдонимы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.
Чему я научусь в уроке «Самосоединения и псевдонимы»?
Соединяйте таблицу с самой собой с помощью псевдонимов, чтобы сравнивать строки внутри одной таблицы, например сотрудников и руководителей или даты и предыдущие даты Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SQL Academy?
Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Самосоединения и псевдонимы»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SQL Academy?
Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Зачем нужны JOIN (повторение реляционной модели)
- Механика INNER JOIN
- LEFT/RIGHT JOIN и внешние соединения
- Самосоединения и псевдонимы