Программирование >>  Sql: полное руководство 

1 ... 37 38 39 [ 40 ] 41 42 43 ... 264


в данной строке таблицы customers найдите имя клиента (J.P. Sinclair) и лимит кредита ($35,500.00) и перепишите их в таблицу результатов.

Вы создали только одну строку результатов запроса Вернитесь к таблице orders и принимайтесь за следующую строку. Повторяйте процесс, начиная с пункта 2, до тех пор, пока не переберете все заказы.

Таблица ORDERS

Отношение первичный ключ-внешний ключ

ORDERNUM

ORDER.DATE

CUST

AMOUNT

1199В1

17-ПРП-Я9к

$31,600 00

113012

11-JAN-90

$3.7 00

112989

03-JAN-90

2101

$1.458 00

Таблица CUSTOMERS

Вывести список всех заказов, включая номер и стоимость заказа, а также имя и лимит кредита клиента, сделавшего заказ.

CUST.NUt

COMPANY X

tuSTJEP

CREDIT LIMTT

Holm & Landis

$55,000 00

J Р Sinclair

$35,000 00

2122

Three-Way Lines

$30,000 00

Рис 7- 7. 3anpt>c, который охватывает две таблицы

Таблица CUSTOMERS

CUST NUM COMPANY


CUST REP CREDIT LIMIT

109 106 106

$30,000 DO

Таблица ORDERS

ORDER.NUM

ORDER.DATE

CUST

QTir

AMOUKT

17-DEC-69

GL 500 flBJ

Vp12

11-JAN-90

2111

$3,1745 00

112989

03-JAN-90

2101

$1,/456 DO

0 0/

© 0 ©.

Результаты запроса/

ORDER NUM

>UNT

COMPANY /

CREDIT LI{flT

112961

fl,500 00

J P Siilair

$35,ooroo


Выполнение многотабличного запроса вручную



Конечно, это не единственный способ получить результаты данного запроса; но как бы вы их ни получали, всегда будут справедливы две вещи:

Каждая строка таблицы результатов запроса формируется из пары строк: одна строка находится в таблице orders, а другая - в таблице customers.

Для нахождения данной пары строк производится сравнение содержимого соответствующих столбцов в этих таблицах.

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

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

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

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

Вывести список всех заказов, включая номер и стоимость заказа, а также имя клиента и лимит его кредита.

SELECT ORDER N0M, AMOUNT, COMPANY, CREDIT LIMIT FROM ORDERS, CUSTOMERS WHERE CUST = CUST NUM

ordernum

AMOUNT

COMPANY

credit limit

112989

$1,458

Jones Mfg.

$65,000

112968

$3,978

First Corp.

$65,000

112963

$3,276

Acme Mfg.

$50,ООО

112987

$27,500

Acme Mfg.

$50,000

112983

$702

Acme Mfg.

$50,ООО

113027

$4,104

Acme Mfg.

$50,000

112993

$1,896

Fred Levis Corp.

$65,000

113065

$2,130

Fred Levis Corp.

$65,ООО

113036

$22,500

Ace International

$35,000

113034

$632

Ace International

$35,000

113058

$1,480

Holm i Landis

$55,000

113055

$150

Holm i Landis

$55,000

113003

$5,625

Holm S Landis

$55,000



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

COST

CUST NUM

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

Включить в таблицу результатов запроса только те пары строк, у которых идентификатор клиента (cost) в таблице orders равен идентификатору клиента (cuST num) в таблице customers .

Обратите внимание вот на что: в инструкции select ничего не говорится о том, как должен выполняться запрос SQL. Там нет никаких упоминаний вроде начните с заказов или начните с клиентов . Вместо этого в запросе сообщается, что должны представлять собой результаты запроса, а способ их получения оставлен на усмотрение СУБД.

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

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

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

Вывести список всех служащих, включая города и регионы, в которых они работают.

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

NAME

Bill Adams Mary Jones Sue Smith Sam Clark Bob Smith Dan Roberts

CITY

REGION

Atlanta

Eastern

New York

Eastern

Los Angeles

Western

New :iork

Eastern

Chicago

Eastern

Chicago

Eastern



1 ... 37 38 39 [ 40 ] 41 42 43 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика