Самосоединение
Часть раздела Основы путешествия по SQL на Coddy. Урок 46 из 72.
Самосоединения — это отдельный тип соединений. До сих пор мы говорили о соединении нескольких таблиц, а самосоединения выполняются с одной и той же таблицей. Классический пример — таблица сотрудников.
| 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 | Minke | Temur |
| 2 | Temur | Tatjana |
| 3 | Tatjana | Marinela |
Задание
СреднеДоступные таблицы и столбцы:
friends:id,name,friend_id
Найди пары друзей, которые являются взаимными друзьями (взаимная дружба существует, когда friend_id человека A указывает на человека B И friend_id человека B указывает на человека A). Выведи имена обоих друзей в одной строке. Назови столбцы friend1 и friend2.
Примечание: включи в условие WHERE критерий f1.id < f2.id (f1 и f2 — псевдонимы двух копий таблицы), чтобы не включать повторяющиеся пары
Попробуйте сами
-- Соедините таблицу с самой собой, чтобы в одной строке отображались два разных человека
SELECT ____ AS friend1, ____ AS friend2
FROM friends f1
JOIN friends f2 ON ____
-- Оставьте только пары, в которых каждый указывает на другого
WHERE ____ AND f1.id < f2.id;В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Больше ключевых слов
Ключевое слово INКлючевое слово BETWEENКлючевое слово LIKEКлючевое слово ASПовторение - Модели мобильных телефонов2Условия
Основы условийКлючевое слово ANDКлючевое слово ORКлючевое слово NOTКомбинирование нескольких условийСкобкиБулевы значения5Арифметические операции
Математические операторыМатематические столбцыОперация moduloФункция ROUND()3Специальный формат возврата
Значения NULLСортировка результатов, часть 1Сортировка результатов, часть 2Повторение - Фирма по кибербезопасностиОграничение количества записейПовторение - Автозавод6Вводные вызовы
Повторение - Парламентские выборыПовторение - Арест преступника полициейПовторение - Ёмкость для напитков в бареПовторение - Создание новых столбцовПотренируйтесь самостоятельно: Песочница SQL