Я не понимаю, почему правое внешнее соединение (пример ниже) не дает полного набора данных таблицы, как это делает левое внешнее соединение; поскольку внешние соединения всегда сохраняют строки соответствующей таблицы.
Создать таблицу
create table join_test
(id number unique not null, name varchar2(10), department varchar2(10));
Заполнить таблицу
select * from join_test;
ID NAME DEPARTMENT 1 stelios sa 2 andros sa 3 stav ba 4 mary ba 5 antonia la 6 lambros ka
Внутреннее соединение
select j1.name, j1.department
from join_test j1 join join_test j2
on(j1.department=j2.department and j1.name<>j2.name);
NAME DEPARTMENT andros sa steliso sa mary ba stav ba
Левое внешнее соединение
select j1.name, j1.department
from join_test j1 left join join_test j2
on(j1.department=j2.department and j1.name<>j2.name)
NAME DEPARTMENT andros sa steliso sa mary ba stav ba antonia la lambros ka
Правое внешнее соединение
select j1.name, j1.department
from join_test j1 right join join_test j2
on(j1.department=j2.department and j1.name<>j2.name)
NAME DEPARTMENT steliso sa andros sa stav ba mary ba
Изменение списка выбора на j2
select j2.name, j2.department
from join_test j1 right join join_test j2
on(j1.department=j2.department and j1.name<>j2.name)
NAME DEPARTMENT andros sa steliso sa mary ba stav ba antonia la lambros ka