Операции соединения в SQL объединяют информацию из двух таблиц, формируя при этом пары связанных строк из этих таблиц. Результирующую таблицу образуют пары тех строк из исходных таблиц, у которых в связанных столбцах содержатся одинаковые значения. Если строка одной из исходных таблиц не имеет пары или значение столбца связи равно NULL, то соединение может привести к неожиданным результатам – такая строка не будет включена в результирующую таблицу. Таким образом, стандартное SQL-соединение может привести к потере информации, если исходные таблицы содержат несвязанные строки.
Избежать этого можно с помощью другой операции соединения, называемой внешним объединением таблиц. Внешние соединение является расширением стандартного соединения, описанного выше и иногда называемого внутренним соединением таблиц.
Чтобы понять смысл внешнего соединения введем новую базу данных, на основе которой будем иллюстрировать работу операций внешнего соединения. Предметной областью этой базы данных является брачное агентство, которому необходимо хранить информацию о желающих воспользоваться его услугами мужчинах и женщинах.
Предположим, что в базе данных хранится следующая информация:
man | |||||
id | name | age | city | address | phone |
Дубов Игорь Петрович | Киров | Ленина, 43-27 | 56-24-12 | ||
Пыжин Иван Юрьевич | NULL | Мытино, 12 | 912-15-02 | ||
Сухов Иван Васильевич | Ухта | Пешкова, 22-56 | NULL | ||
Жижев Коля | Москва | Трохово, 157-24 | 812-56-74 | ||
Петров Василий | NULL | Киров | Ванеева, 72 | NULL |
woman | |||||
id | name | age | city | address | phone |
Стулова Ольга Игоревна | Москва | Мостовая, 34-96 | NULL | ||
Кукова Ирина Ивановна | Киров | Ленина, 123-7 | 18-27-59 | ||
Шарова Юля | NULL | Псков | Садовая, 6 | 917-26-99 | |
Гайкина София | Мурманск | 3-е шоссе, 123 | NULL | ||
Морс Инесса | NULL | Пушкина, 72-61 | NULL |
Значения NULL в данной базе в поле “phone” означают, что у клиента нет телефона. Во всех остальных полях – что клиент забыл или постеснялся указать нужные данные при заполнении анкеты.