Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Часть II.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.56 Mб
Скачать

Внутренняя структура объединения таблиц

Для простых объединений таблиц довольно легко написать правильную инструкцию SELECT на основе запроса, выраженного на обычном языке. И наоборот, глядя на инструкцию SELECT можно легко определить, что она делает. Однако если в объединении участвует много таблиц или используется сложное условие отбора бывает не так-то просто понять, какую функцию выполняет та или иная инструкция SELECT. По этой причине необходимо дать более точное определение понятию “объединение”.

Умножение таблиц

Объединение — это частный случай более общей комбинации данных из двух таблиц известной под названием декартово произведение (или просто произведение) двух таблиц. Произведение двух таблиц представляет собой таблицу (называемую таблицей произведения), состоящую из всех возможных пар строк обеих таблиц Столбцами таблицы произведения являются все столбцы первой таблицы, за которыми следуют все столбцы второй таблицы. На рис. изображен пример произведения двух маленьких таблиц.

Если создать запрос к двум таблицам без предложения WHERE, то таблица результат запроса окажется произведением двух таблиц.

Два приведенных выше запроса указывают на важную связь между объединениями и произведением:

“Объединение двух таблиц является произведением этих таблиц, из которого удалены некоторые строки. Удаляются именно те строки, которые не удовлетворяют условию сравнения связанных столбцов (условию отбора) для данного объединения”.

Понятие произведения важно, так как оно входит в формальное определение правил выполнения многотабличных запросов на выборку, приведенное в следующем параграфе.

Внешнее объединение таблиц

Операция объединения в SQL соединяет информацию из двух таблиц, формируя пары связанных строк из этих двух таблиц. Объединенную таблицу образуют пары тех строк из различных таблиц, у которых в связанных столбцах содержатся одинаковые значения. Если строка одной из таблиц не имеет пары, то объединение может привести к неожиданным результатам. Это иллюстрируют следующие далее запросы.

Такие результаты запроса получаются с помощью другой операции объединения, называемой внешним объединением таблиц (в предложении WHERE Оно обозначается символами *=). Внешнее объединение является расширением стандартного объединения, описанного ранее в настоящей главе и иногда называемого внутренним объединением таблиц. В стандарте SQL1 дано определение только внутреннего объединения; понятие внешнего объединения в нем отсутствует. Ранние СУВД фирмы IВМ также поддерживают только внутреннее объединение. Однако внешнее объединение является понятной и полезной частью реляционной модели базы данных и реализовано во многих СУВД.

Чтобы понять смысл внешнего объединения, будет полезно отвлечься от учебной базы данных и рассмотреть две простые таблицы, изображенные на рис. 7.12. В таблице iIЗ находится список пяти девочек и городов, в которых они живут; в таблице вов содержится список пяти мальчиков и их городов. Чтобы найти пары девочек и мальчиков, живуiдих в одном и том же городе, можно использовать следующий запрос, формирующий внутреннее объединение двух таблиц:

С1iiсао

Внутреннее объединение дает четыре строки в таблице результатов запроса. Обратите внимание, что две девочки (Анна (Аййе) и Нэнси (Т\апсу)) и два мальчика (джеймс (Зайiе8) и джордж (6еоге)) не представлены в таблице результатов запроса. Эти строки не имеют пары в другой таблице и поэтому отсутствуют в таблице результатов внутреннего объединения. Две несвязанные строки (Анна и джеймс) имеют действительные значения в столбцах сiт, но они не совпалают ни с одним городом в противоположной таблице. Две другие несвязанные строки (Нэнси и джордж) имеют в столбцах сiт значение жы, а по правилам Е значение Ы[)II не равно iшкакому другому значению (даже другому значению жзы).

Предположим, что вы хотите вывести список пар девочка/мальчик, живуiдих в одних и тех же городах, и включить в него девочек и мальчиков без пары. Этот результат дает внешнее объединение таблиц и ВО. Схема формирования внешнего объединения изображена на рис. 7.12, а в табл. 7.2 приведена последовательность построения внешнего объединения. Вот инструкция $Е, дающая в результате внешнее объединение:

Внешнее объединение двух таблиц содержит восемь строк Четыре строки идентичны строкам внутреннего объединения этих таблиц две другие строки, для Анны и Ннси, являются несвязанными строюiми таблицы iiз Эти строки были расiциреiiы значениями жзы, т е приравненьг к воображаемой строке таблицы ВОУЗ. содержащей только значения и добавлены в результаты запроса две последние строки, для джеймса и джорджа, являются несвязанньгми строками таблицы ВОУЗ Эти строки также были расiцирень значениями жзы. (приравнены к воображаемой строке таблиIIы содержащей только значения ышi) и добавлены в результаты запроса

Как видно из этого примера, внешнее объединение является объединением, “сохраняющим информацию” Каждая строка таблицы воуз представлена в таблице результатоi запроса (некоторые более одного раза) Аналогично, каждая строка таблиi СIIЗ представлена в таблице результатов (некоторые, опять-таки, более одного раза)

76

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]