Элемент SELF JOIN используется для объединения таблицы с ней самой таким образом, будто это две разные таблицы, временно переименовывая одну из них.
Запрос и использованием SELF JOIN имеет следующий вид:
SELECT a.имяколонки, b.имя_колонки...
FROM таблица1 a, таблица1 b
WHERE a.общее поле = b.общее поле;
Пример:
Предположим, что у нас есть таблица developers, которая содержит следующие записи:
+----+-------------------+------------+------------+--------+
| ID | NAME | SPECIALTY | EXPERIENCE | SALARY |
+----+-------------------+------------+------------+--------+
| 1 | Eugene Suleimanov | Java | 2 | 2500 |
| 2 | Peter Romanenko | Java | 3 | 3500 |
| 3 | Andrei Komarov | JavaScript | 3 | 2500 |
| 4 | Konstantin Geiko | C# | 2 | 2000 |
| 5 | Asya Suleimanova | UI/UX | 2 | 1800 |
| 6 | Kolya Nikolaev | Javascript | 5 | 3400 |
| 7 | Ivan Ivanov | C# | 1 | 900 |
| 8 | Ludmila Geiko | UI/UX | 2 | 1800 |
+----+-------------------+------------+------------+--------+
Попробуем выполнить следующий запрос:
mysql> SELECT a.ID, a.NAME, a.SALARY
FROM developers a, developers b
WHERE a.SALARY < b.SALARY
AND b.ID = 1;
В результате мы получим следующую таблицу:
+----+------------------+--------+
| ID | NAME | SALARY |
+----+------------------+--------+
| 4 | Konstantin Geiko | 2000 |
| 5 | Asya Suleimanova | 1800 |
| 7 | Ivan Ivanov | 900 |
| 8 | Ludmila Geiko | 1800 |
+----+------------------+--------+
Как мы видим, мы получили всех разработчиков из таблицы developers, зарплата которых ниже зарплаты разработчика с ID = 1 (Eugene Suleimanov).
На этом мы заканчиваем изучение SELF JOIN.