Иногда необходимо получить всю информацию из одной таблицы и некоторую информацию из связанной с ней таблицы для тех строк, для которых такая информация существует. Эта операция называется внешним соединением таблиц. Такое соединение не отбрасывает записи только по той причине, что им нет парных. Операция внешнего соединения записывается специальным способом: вместо знака = применяются *= или =* или **.
Знак операции
Назначение
=*
Отбор всех записей из левой таблицы и отбор соответствующих записей из правой таблицы, если такие записи есть.
*=
Отбор всех записей из правой таблицы и отбор соответствующих записей из левой таблицы, если такие записи есть.
**
Отбор всех записей из обеих таблиц. Если есть соответствие между записями, то они будут объединены.
=
Отбор только тех записей, которые соответствуют друг другу.
Независимо от записи связь между полями остается прежней: по равенству.
Приведем пример работы с внешним соединением. Выберем из двух таблиц – BOOK и REPORT все записи так, чтобы были выбраны все книги, а также статьи, у которых автор статьи и книги одинаковый, если таковые есть.
Пример:
select b.NAME as BOOKNAME, r.NAME as ARTICLE from BOOK b, REPORT r where b.ID_AUTHOR =* r.ID_AUTHOR;
Рисунок 1. Выборка данных. Отбор всех записей из таблицы BOOK
Теперь выберем из двух таблиц – BOOK и REPORT все записи так, чтобы были выбраны все статьи, а также книги, у которых автор статьи и книги одинаковый, если таковые есть.
Пример:
select b.NAME as BOOKNAME, r.NAME as ARTICLE from BOOK b, REPORT r where b.ID_AUTHOR *= r.ID_AUTHOR;
Рисунок 2. Выборка данных. Отбор всех записей из таблицы REPORT
Если не использовать внешнее соединение, результаты выборки будут следующие:
select b.NAME as BOOKNAME, r.NAME as ARTICLE from BOOK b, REPORT r where b.ID_AUTHOR = r.ID_AUTHOR;
Рисунок 3. Выборка данных без использования внешнего соединения
Если произвести отбор всех записей из обеих таблиц, то результат будет следующим:
select b.NAME as BOOKNAME, r.NAME as ARTICLE from BOOK b, REPORT r where b.ID_AUTHOR ** r.ID_AUTHOR;
Рисунок 4. Выборка данных. Отбор всех записей из таблиц BOOK и REPORT