double arrow

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

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

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

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 для создания столбцов результирующей таблицы - более удобные для восприятия имена.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: