Внешнее соединение возвращает все строки из одной таблицы, и только те строки из другой таблицы, для которых условие соединения принимает значение true. Строки второй таблицы, не удовлетворяющие условию соединения (т.е. имеющие значение false), получают значение null в результирующем наборе. Существует два вида внешнего соединения: LEFT JOIN и RIGHT JOIN. В левом соединении (LEFT JOIN) запрос возвращает все строки из левой таблицы (т.е. таблицы, стоящей слева от зарезервированного словосочетания LEFT JOIN) и только те из правой таблицы, которые удовлетворяют условию соединения. Если же в правой таблице не найдется строк, удовлетворяющих заданному условию, то в результате они замещаются значениями null. Для правого соединения результат будет обратным.
Пример 36 демонстрирует, каким образом можно получить список сотрудников и название их отделов, включая сотрудников, еще не назначенных ни в какой отдел.
| SELECT first_name, last_name, department
FROM employee e LEFT JOIN department d
ON e.dept_no = d.dept_no
|
|
Пример 38 демонстрирует, каким образом можно получить аналогичную информацию путем правого соединения.
| SELECT first_name, last_name, department
FROM employee e RIGHT JOIN department d
ON e.dept_no = d.dept_no
|
|
Гибкость и мощь языка SQL состоит в том, что он позволяет объединить все операции реляционной алгебры в одной конструкции, извлекая, таким образом, любую требуемую информацию.