0Pricing
SQL Academy · Урок

Самосоединения и псевдонимы

Соединяйте таблицу с самой собой с помощью псевдонимов, чтобы сравнивать строки внутри одной таблицы, например сотрудников и руководителей или даты и предыдущие даты

«Самосоединения и псевдонимы» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Зачем нужны JOIN (повторение реляционной модели)
  2. Механика INNER JOIN
  3. LEFT/RIGHT JOIN и внешние соединения
  4. Самосоединения и псевдонимы
← Назад к SQL Academy