Самосоединение
Часть раздела Основы путешествия по SQL на Coddy — урок 46 из 72.
Самообъединения (self-joins) — это особый тип объединений. До этого момента мы обсуждали объединение нескольких таблиц, но самообъединение — это когда таблица объединяется сама с собой. Классический пример — таблица employees.
| employee_id | employee_name | manager_id |
| 1 | Minke | 2 |
| 2 | Temur | 3 |
| 3 | Tatjana | 4 |
| 4 | Marinela |
У каждого сотрудника есть руководитель, за исключением самого главного руководителя, и каждый руководитель также является сотрудником.
Проблема: Для каждого сотрудника мы хотим знать имя менеджера.
SELECT e2.employee_id, e2.employee_name, e1.employee_name as manager_name
FROM employees as e1
JOIN employees as e2 ON e1.employee_id = e2.manager_idМы выполняем соединение одной и той же таблицы, за исключением того, что в первый раз мы называем её e1, а во второй раз — e2. Соединение выполняется по полям employee_id и manager_id.
Результат:
| employee_id | employee_name | manager_name |
|---|---|---|
| 1 | Минке | Темур |
| 2 | Темур | Татьяна |
| 3 | Татьяна | Маринела |
Задание
СреднеДоступные таблицы и столбцы:
<strong>friends</strong>:<strong>id</strong>,<strong>name</strong>,<strong>friend_id</strong>
Найдите пары друзей, которые являются взаимными друзьями (взаимная дружба существует, когда friend_id человека А указывает на человека Б, И friend_id человека Б указывает на человека А). Выведите имена обоих друзей в одной строке. Назовите столбцы friend1 и friend2.
Примечание: Включите в предложение WHERE условие friend1.id < friend2.id, чтобы исключить дублирующиеся пары
Шпаргалка
Self-join (самообъединение) позволяет объединять таблицу саму с собой, используя псевдонимы таблиц. Это полезно, когда вам нужно сравнить строки внутри одной и той же таблицы или установить связи между записями в одной таблице.
Базовый синтаксис self-join:
SELECT columns
FROM table_name AS alias1
JOIN table_name AS alias2 ON alias1.column = alias2.columnПример с сотрудниками и менеджерами:
SELECT e2.employee_id, e2.employee_name, e1.employee_name as manager_name
FROM employees as e1
JOIN employees as e2 ON e1.employee_id = e2.manager_idКлючевые моменты:
- Используйте разные псевдонимы (например,
e1,e2) для одной и той же таблицы - Условие объединения связывает связанные поля между псевдонимами
- Полезно для иерархических данных, таких как отношения сотрудник-менеджер
Попробуйте сами
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Больше ключевых слов
Ключевое слово INКлючевое слово BETWEENКлючевое слово LIKEКлючевое слово ASПовторение - Модели мобильных телефонов2Условия
Основы условийКлючевое слово ANDКлючевое слово ORКлючевое слово NOTКомбинирование нескольких условийСкобкиБулевы значения5Арифметические операции
Математические операторыМатематические столбцыОперация moduloФункция ROUND()3Специальный формат возврата
Значения NULLСортировка результатов, часть 1Сортировка результатов, часть 2Повторение - Фирма по кибербезопасностиОграничение количества записейПовторение - Автозавод6Вводные вызовы
Повторение - Парламентские выборыПовторение - Арест преступника полициейПовторение - Ёмкость для напитков в бареПовторение - Создание новых столбцов