Реляционные операторы
Левое внешнее объединение
В запросе, имеющем объединение, левая таблица – это та, которая в операторе запроса предшествует ключевому слову JOIN, а правая – та, которая следует за ним. При левом внешнем объединении (left outer join) несоответствующие строки, имеющиеся в левой таблице, в выводе сохраняются, а имеющиеся в правой – из него, наоборот, удаляются.
Чтобы понять работу внешних объединений, представьте себе корпоративную базу данных, в которой хранятся записи о сотрудниках компании, ее отделах и представительствах. Примеры данных этой компании приведены в табл. 10.1-10.3.
Таблица 10.1. LOCATION (представительство).
| LOCATION_ID (идентификатор представительства) | CITY (город) |
| 1 | Boston |
| 3 | Tampa |
| 5 | Chicago |
Таблица 10.2. DEPT (отдел).
| DEPT_ID (идентификатор отдела) | LOCATION_ID | NAME (название) |
| 21 | 1 | Sales |
| 24 | 1 | Admin |
| 27 | 5 | Repair |
| 29 | 5 | Stock |
Таблица 10.3. EMPLOYEE (сотрудник).
| EMP_ID (идентификатор сотрудника) | DEPT_ID | NAME (фамилия) |
| 61 | 24 | Kirk |
| 63 | 27 | McCoy |
Теперь предположим, что вам нужно просмотреть все данные обо всех сотрудниках, в том числе, в каком отделе и представительстве сотрудник работает. Такую задачу можно выполнить с помощью объединения, основанного на равенстве:
SELECT * FROM LOCATION L, DEPT D, EMPLOYEE E WHERE L.LocationlD a D.LocationID AND D.DeptID = E.DeptID;
Результат выполнения этого оператора следующий:
| 1 | Boston | 24 | Admin | 61 | 24 | Kirk |
| 5 | Chicago | 27 | Repair | 63 | 27 | McCoy |
Полученная в результате таблица содержит все данные обо всех сотрудниках, в том числе, в каком отделе и представительстве сотрудник работает. Так как каждый сотрудник компании работает в каком-либо представительстве и в одном из отделов, то для этого примера как раз и подходит объединение, основанное на равенстве.
