Внешнее объединение таблиц
Как уже было описано выше, операция объединения соединяет данные из двух таблиц, формируя пары связанных строк из этих таблиц. При внутреннем объединении все записи, для которых не находится пары в другой таблице, просто игнорируются. Поэтому если строка одной из таблиц не имеет пары, то такое объединение (внутреннее) может привести к неожиданным результатам.
Рассмотрим следующий пример. Вывести список служащих и городов, где они работают
SELECT FAMILY, NAME, CITY
FROM zakazy.sluzhaschie s, zakazy.offisy o
WHERE o.id_ofc = s.id_ofc
Рис. 4.4 - Результат выполнения запроса внутреннего объединения |
Результат выполнения этого запроса приведен на Рис. 4.4.
Из приведенного результата видно, что в результирующую таблицу не вошли записи из таблицы offisy об офисе, расположенном в г. Омск, для которого еще не набраны служащие, и таблицы sluzhaschie об Уткине Денисе, который еще не получил назначение ни в один офис. Таким образом, если в таблицах объединения содержатся несвязанные (непарные) строки, то стандартный SQL приведет к потере информации.
Если мы хотим вывести сведения обо всех офисах, независимо от того, набраны в него служащие или еще нет, то правильный результат можно получить, выполнив запрос, приведенный ниже:
SELECT *
FROM zakazy.offisy o
LEFT JOIN zakazy.sluzhaschie s on o.id_ofc = s.id_ofc
Результат выполнения запроса показан на Рис. 4.5. Запрос, приведенный в данном примере, называется внешним (в данном случае левым) объединением таблиц.
Рис. 4.5 - Результат выполнения запроса левого внешнего объединения |
Как видно из приведенного примера, внешнее объединение может сохранить записи, для которых не находится соответствия в других наборах. При этом недостающие поля заполняются значениями NULL.
Дата добавления: 2015-02-03; просмотров: 1190;