|
Программирование >> Sql: полное руководство
Larry Fitch Paul Cruz Nancy Angelli LOS Angeles Western Chicago Eastern Denver Western Таблица salesreps (потомок) содержит столбец rep office, который является внешним ключом для таблицы offices (предок). Здесь отношение предок/потомок используется с целью поиска в таблице office для каждого служащего соответствующей строки, содержащей город и регион, и включения ее в результаты запроса. Таблица OFFICES
Таблица SALE EHPL NUH 105 109 102 106 104 101 110 108 103 107 NAME Bill Adams Mary Jones Sue Smith Sarn Clarl< Bob Smith Dan Roberts Tom Snyder Larry Fitch Paul Cruz Nancy Ange11 i TITLE Sales Rep Sales Rep Sales Rep VP Sales Sales Hgr Sales Rep Sales Rep Sales Mgr Sales Rep Sales Rep ► Результаты запроса
Phid 7.3. Запросе испопьзованнем отношения предок/потомок мв>ту таблицами OFFXGEBкSALESREPS Вот еще один запрос к этим же двум таблицам, но здесь роли предка и потомка меняются (рис. 7.4): Вывести список офисов, включая имена и должности их руководителей. SELECT CITY, NAME, TITLE FROM OFFICES, SALESREPS WHERE MGR = EMPL NUM CITY NAME TITLE Chicago Atlanta New York Denver Los Angeles Bob Smith Sales Mgr Bill Adams Sales Rep Sam Clark VP Sales Larry Fitch Sales Mgr Larry Fitch Sales Mgr Таблица offices (потомок) содержит столбец mgr, представляющий собой внешний ключ для таблицы salesreps (предок). Это отношение используется здесь, чтобы для каждого офиса найти в таблице salesreps соответствующую строку, содержа1цую имя и должность руководителя, и включить ее в результаты запроса. Таблица SALESREPS
Таблица OFF I CI Результаты запроса
Рис. 7.4. Другой запрос с использованием отношения предок/потомокЗйржду табтцами OFFICES и SALEsMpS ~ 4 - В SQL не требуется, чтобы связанные столбцы были включены в результаты многотабличного запроса. На практике они чаще всего и не включаются, как это было в двух предыдущих примерах. Это связано с тем, что первичные и внешние ключи, как правило, представляют собой идентификаторы (такие как идентификатор офиса или идентификатор служащего в приведегшых примерах), которые человеку трудно запомнить, тогда как соответствующие названия (города, районы, имена, должности) запомнить гораздо легче. Поэтому вполне естественно, что в предложении where для объединения двух таблиц используются идентификаторы, а в предложении select для создания столбцов результатов запроса - более удобные для восприятия имена. Условия для отбора строк в многотабличном запросе можно комбинировать условие отбора, в котором задаются связанные столбцы, с другими условиями отбора, чтобы еще больше сузить результаты запроса. Предположим, что требуется повторить предыдущий запрос, но включить в него только офисы, имеющие большие плановые объемы продаж. Вывести список офисов, в которых план продаж превышает $600000. SELECT CITY, NAME, TITLE FROM OFFICES, SALESREPS WHERE MGR = EMPL NUM AND TARGET > 600000.00 CITY NAME TITLE Chicago Los Angeles Bob Smith Larry Fitch Sales Mgr Sales Mgr Вследствие применения дополнительного условия отбора число строк в таблице результатов запроса уменьшилось. Согласно первому условию (mgr=empl num) из таблиц offices и salesreps отбираются пары строк, которые имеют соответствую-шее отношение предок/потомок; согласно второму условию производится дальнейший отбор только тех пар строк, где плановый объем продаж превышает $60 0000. Несколько связанных столбцов Таблицы orders и products в учебной базе данных связаны парой составных ключей. Столбцы mfr и product в таблице orders вместе образуют внешний ключ для таблицы products и связаны с ее столбцами mfr id и product id соответственно. Чтобы объединить таблицы на основе такого отношения предок/потомок, необходимо задать обе пары связанных столбцов, как показано в данном примере: Вывести список всех заказов, в том числе их стоимости и описания товаров. SELECT 0RDER NUM, AMOUNT, DESCRIPTION FROM ORDERS, PRODUCTS WHERE MFR = MFR ID AND PRODUCT = PRODUCT ID
Условие отбора в данном запросе показывает, что связанными парами строк таблиц orders и products являются те, в которых пары связанных столбцов содержат одни и те же значения Объединения посредством нескольких столбцов распространены меньше, чем объединения посредством одного столбца, и обычно встречаются в запросах с составными внешними ключами, как в приведенном выше примере. Запросы на выборку к трем и более таблицам SQL позволяет объединять данные из трех или более таблиц, используя ту же самую методику, что и для объединения данных из двух таблиц Вот простой пример объединения трех таблиц: Вывести список заказов стоимостыо выше $25000, включая имя служащего, принявшего заказ, и имя клиента, сделавшего его. SELECT 0RDER NUM, AMOUNT, COMPANY, NAME FROM ORDERS, CUSTOMERS, SALESREPS WHERE CUST = CUST NUM
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |