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

Запросы с использованием отношения­предок-потомок

Как правило, многотабличные запросы выполняются для двух таблиц, связанных отношением предок-потомок. Запрос на извлечение данных о заказах и клиентах, приведенный выше, является примером такого запроса. У каждого заказа из таблицы-потомка существует соответствующий ему клиент из таблицы-предка. Таким образом, пары строк, из которых формируются строки результирующей таблицы, связаны отношением предок-пото­мок.

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

SELECT FAMILY, NAME, CITY, REGION

FROM SLUZHASCHIE, OFFISY

WHERE SLUZHASCHIE.ID_OFC = OFFISY.ID_OFC

Результат выполнения этого запроса будет иметь вид

FAMILY

NAME

CITY

REGION

Иванов

Иван

Буинск

Татарстан

Полев

Андрей

Буинск

Татарстан

Уткин

Денис

Буинск

Татарстан

Петров

Петр

Инза

Ульяновская

Филатов

Петр

Инза

Ульяновская

Пронин

Игорь

Тверь

Московская

Федоров

Федор

Тверь

Московская

Таблица SLUZHASCHIE (потомок) содержит столбец ID_OFC, который является вторич­ным ключом для таблицы OFFISY (предок). Это отношение предок-потомок используется с целью поиска в таблице OFFISY для каждого служащего соответствующей строки, содержащей город и регион, и включения ее в результаты запроса.

Рассмотрим еще один запрос, использующий отношение предок-потомок, но здесь роли предка и потомка меняются. Таблица OFFISY (потомок) содержит столбец MNGR, представляющий собой вторичный ключ для таблицы SLUZHASCHIE (предок).

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

Создадим запрос, который выводит список офисов с указанием города, в котором он расположен, а также фамилию и имя руководителя офиса.

SELECT CITY, FAMILY, NAME

FROM OFFISY, SLUZHASCHIE

WHERE OFFISY.MNGR = SLUZHASCHIE.MNGR

Результат выполнения этого запроса приведен в следующей таблице.

CITY

FAMILY

NAME

Буинск

Полев

Андрей

Инза

Филатов

Петр

Тверь

Пронин

Игорь

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

Поэтому в предложении WHERE для объединения двух таблиц используются идентификаторы, а в предложении SELECT для создания столбцов результирующей таблицы  более удобные для восприятия имена.

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