Задача Одновременно из нескольких таблиц требуется выбрать данные, отсутствующие в той или иной таблице. Чтобы возвратить строки таблицы DEPT, которых нет в таблице EMP (любой отдел, в котором нет служащих), необходимо провести внешнее объединение. Рассмотрим следующий запрос, в результате которого будут возвращены все значения столбцов DEPTNO и DNAME таблицы DEPT и имена всех служащих всех отделов (если в отделе есть служащие):
select d.deptno,d.dname,e.ename from scott.dept d left outer join emp e on (d.deptno=e.deptno);
или
select d.deptno,d.dname,e.ename from scott.dept d, scott.emp e where d.deptno=e.deptno(+);
DEPTNO |
DNAME |
ENAME |
-------------- |
----------------------- |
------------------ |
10 |
ACCOUNTING |
CLARK |
10 |
ACCOUNTING |
MILLER |
20 |
RESEARCH |
JONES |
20 |
RESEARCH |
FORD |
20 |
RESEARCH |
ADAMS |
20 |
RESEARCH |
SMITH |
20 |
RESEARCH |
SCOTT |
30 |
SALES |
WARD |
30 |
SALES |
TURNER |
30 |
SALES |
ALLEN |
30 |
SALES |
JAMES |
30 |
SALES |
BLAKE |
30 |
SALES |
MARTIN |
40 |
OPERATIONS |
|
Последняя строка, отдел OPERATIONS (операции), возвращена, несмотря на то что в отделе нет ни одного служащего. Это является следствием левостороннего внешнего объединения таблицы DEPT с таблицей EMP.
Источник: Молинаро Э. "SQL. Сборник рецептов"
|