Руководство по SQL. SELF JOIN.

Элемент 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.