Реляционные операторы
Левое внешнее объединение
В запросе, имеющем объединение, левая таблица – это та, которая в операторе запроса предшествует ключевому слову 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 |
Полученная в результате таблица содержит все данные обо всех сотрудниках, в том числе, в каком отделе и представительстве сотрудник работает. Так как каждый сотрудник компании работает в каком-либо представительстве и в одном из отделов, то для этого примера как раз и подходит объединение, основанное на равенстве.