SELF JOINS в SQL используется для соединения таблицы на себя, как если бы в таблице было две таблицы; временно переименовать хотя бы одну таблицу в операторе SQL.
Базовый синтаксис SELF JOIN выглядит следующим образом:
SELECT a.column_name, b.column_name... FROM table1 a, table1 b WHERE a.common_field = b.common_field;
Здесь, предложение WHERE может быть любое данное выражение основанное на вашем требовании.
Рассмотрим следующую таблицу.
Таблица CUSTOMERS состоит из следующих записей:
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Maxim | 35 | Moscow | 20000.00 | | 2 | Roma | 34 | Krasnodar | 15000.00 | | 3 | Oleg | 33 | Rostov | 20000.00 | | 4 | Masha | 35 | Moscow | 65000.00 | | 5 | Ruslan | 34 | Omsk | 85000.00 | | 6 | Dima | 32 | SP | 45000.00 | | 7 | AndreyEx | 38 | SP | 100000.00| +----+----------+-----+-----------+----------+
Теперь, давайте объединим эту таблицу, используя SELF JOIN следующим образом:
SQL> SELECT a.ID, b.NAME, a.SALARY FROM CUSTOMERS a, CUSTOMERS b WHERE a.SALARY < b.SALARY;
Это произведет следующий результат:
+----+----------+-----+--------+ | ID | NAME | AGE | AMOUNT | +----+----------+-----+--------+ | 1 | Maxim | 35 | 15000 | | 3 | Oleg | 33 | 15000 | | 4 | Masha | 35 | 20000 | | 4 | Masha | 35 | 15000 | | 4 | Masha | 35 | 20000 | | 4 | Masha | 35 | 45000 | | 5 | Ruslan | 34 | 20000 | | 5 | Ruslan | 34 | 15000 | | 5 | Ruslan | 34 | 20000 | | 5 | Ruslan | 34 | 65000 | | 5 | Ruslan | 34 | 45000 | | 6 | Dima | 32 | 20000 | | 6 | Dima | 32 | 15000 | | 6 | Dima | 32 | 20000 | | 7 | AndreyEx | 38 | 20000 | | 7 | AndreyEx | 38 | 15000 | | 7 | AndreyEx | 38 | 20000 | | 7 | AndreyEx | 38 | 65000 | | 7 | AndreyEx | 38 | 85000 | | 7 | AndreyEx | 38 | 45000 | +----+----------+-----+--------+