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

1.3.25. Запросы на выборку к трём и более таблицам

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

SELECT ORDER_NUM, AMOUNT, COMPANY, NAME FROM ORDERS, CUSTOMERS, SALESREPS WHERE CUST = CUST_NUM AND REP = EMPL_NUM AND AMOUNT > 25000.00

Как видно из рисунка, в этом запросе используются два внешних ключа таблицы ORDERS. Столбец CUST является внешним ключом для таблицы CUSTOMERS, он связывает каждый заказ с клиентом, сделавшим его. Столбец REP является внешним ключом для таблицы SALESREPS, связывая каждый заказ со служащим, принявшим его. Проще говоря, запрос связывает каждый заказ с соответствующим клиентом и служащим.

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

А вот ещё один запрос к трём таблицам, в котором используется другая комбинация отношений предок/потомок. Вывести список заказов стоимостью выше $25000, включая имя клиента, сделавшего заказ, и имя служащего, закреплённого за этим клиентом:

SELECT ORDER_NUM, AMOUNT, COMPANY, NAME FROM ORDERS, CUSTOMERS, SALESREPS WHERE CUST = CUST_NUM AND CUST_REP = EMPL_NUM AND AMOUNT > 25000.00

Прочие объединения таблиц по равенству

Огромное множество многотабличных запросов основано на отношениях предок/потомок, но в SQL не требуется, чтобы связанные столбцы представляли собой пару "внешний ключ - первичный ключ". Любые два столбца из двух таблиц могут быть связанными, если только они имеют сравнимые типы данных. Вот пример запроса, в котором связанными являются столбцы с датами.

Найти все заказы, полученные в тот день, когда на работу был принят новый служащий:

SELECT ORDER_NUM, AMOUNT, ORDEREDATE, NAME FROM ORDERS, SALESREPS WHERE ORDER_DATE = HIRE DATE

Результатами запроса являются пары строк из таблиц ORDERS и SALESREPS, имеющие одинаковые значения в столбцах ORDER_DATE и HIRE_DATE. Эти столбцы не являются ни внешним ключом, ни первичным ключом, да и вообще отношение между этими парами строк, надо признать, довольно странное: общее у заказов и служащих только то, что они появились в компании в один день. Тем не менее, СУБД с готовностью объединяет таблицы в соответствии с запросом.

Фактически, связанные столбцы, подобные приведённым в данном примере, создают между двумя таблицами отношение "многие-ко-многим". Может поступить много заказов в день приёма на работу какого-нибудь служащего, а также в день получения какого-нибудь заказа на работу может быть принято несколько служащих.

1.3.26. Объединение таблиц по неравенству

Термин "объединение" применяется к любому запросу, который объединяет данные из двух таблиц базы данных путем сравнения значений в двух столбцах этих таблиц. Самыми распространёнными являются объединения, созданные на основе равенства связанных столбцов (объединения по равенству). Кроме того, SQL позволяет объединять таблицы с помощью других операций сравнения. В приведённом ниже примере для объединения таблиц используется операция сравнения "больше чем" (>).

Получить все комбинации служащих и офисов, где плановый объём продаж служащего больше, чем план какого-либо офиса:

SELECT NAME, QUOTA, CITY, TARGET FROM SALESREPS, OFFICES WHERE QUOTA > TARGET

Как и во всех запросах к двум таблицам, каждая строка результатов запроса получается из пары строк, в данном случае содержащихся в таблицах SALESREPS и OFFICES.

Условие QUOTA > TARGET отбирает пары строк, в которых значение столбца QUOTA из таблицы SALESREPS превышает значение столбца TARGET из таблицы OFFICES.

Обратите внимание: выбранные из таблиц SALESREPS и OFFICES пары строк связаны только таким образом; в частности, не требуется, чтобы строка таблицы SALESREPS представляла служащего, который работает в офисе, представленном строкой таблицы OFFICES. Следует признать, что данный пример носит несколько искусственный характер и является иллюстрацией того, почему столь мало распространены объединения по неравенству. Однако они могут оказаться полезными в приложениях, предназначенных для поддержки принятия решений, и в других приложениях, исследующих более сложные взаимосвязи в базе данных.

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