Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭУМКД_БД_2.doc
Скачиваний:
20
Добавлен:
23.09.2019
Размер:
6.01 Mб
Скачать

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

Среди многотабличных запросов наиболее распространены запросы к двум таблицам, связанным с помощью отношения предок/потомок. Например: у каждого заказа (потомка) есть соответствующий ему клиент (предок), и каждый клиент (предок) может иметь много своих заказов (потомков). Пары строк, из которых формируются результаты запроса, связаны отношением предок/потомок. В реляционной базе данных первичные и внешние ключи создают отношение предок/потомок. Таблица, содержащая внешний ключ, является потомком, а таблица с соответствующим первичным ключом – предком.

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

SELECT NAME, CITY, REGION FROM SALESREPS, OFFICES WHERE REP_OFFICE = OFFICE

Рисунок 1.3.24.1 – Пример запроса

Таблица SALESREPS (потомок) содержит столбец REP_OFFICE, который является внешним ключом для таблицы OFFICES (предок). Здесь отношение предок/потомок используется с целью поиска в таблице OFFICES для каждого служащего соответствующей строки, содержащей город и регион, и включения её в результаты запроса.

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

SELECT CITY, NAME, TITLE FROM OFFICES, SALESREPS WHERE MGR = EMPL_NUM

Рисунок 1.3.24.2 – Пример запроса

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

В SQL не требуется, чтобы связанные столбцы были включены в результаты многотабличного запроса.

Условия для отбора строк

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

Вывести список офисов, в которых план продаж превышает $600000:

SELECT CITY, NAME, TITLE FROM OFFICES, SALESREPS WHERE MGR = EMPL_NUM AND TARGET > 600000.00

Вследствие применения дополнительного условия отбора число строк в таблице результатов запроса уменьшилось.

Несколько связанных столбцов

Например, нам надо вывести список всех заказов, в том числе их стоимости и описания товаров:

SELECT ORDER_NUM, AMOUNT, DESCRIPTION FROM ORDERS, PRODUCTS WHERE MFR = MFR_ID AND PRODUCT = PRODUCT_ID

Условие отбора в данном запросе показывает, что связанными парами строк таблиц ORDERS и PRODUCTS являются те, в которых пары связанных столбцов содержат одни и те же значения. Объединения посредством нескольких столбцов распространены меньше, чем объединения посредством одного столбца, и обычно встречаются в запросах с составными внешними ключами, как в приведённом выше примере.

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