Запросы с использованием отношения предок-потомок
Как правило, многотабличные запросы выполняются для двух таблиц, связанных отношением предок-потомок. Запрос на извлечение данных о заказах и клиентах, приведенный выше, является примером такого запроса. У каждого заказа из таблицы-потомка существует соответствующий ему клиент из таблицы-предка. Таким образом, пары строк, из которых формируются строки результирующей таблицы, связаны отношением предок-потомок.
Чтобы использовать в многотабличном запросе отношение предок-потомок, необходимо задать в нем условие отбора, в котором значение первичного ключа сравнивается со значением вторичного ключа. Приведем пример такого запроса, который выводит список всех служащих с указанием городов и регионов, в которых они работают.
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 для создания столбцов результирующей таблицы - более удобные для восприятия имена.
Дата добавления: 2015-02-03; просмотров: 1056;