|
Программирование >> Sql: полное руководство
в данной строке таблицы customers найдите имя клиента (J.P. Sinclair) и лимит кредита ($35,500.00) и перепишите их в таблицу результатов. Вы создали только одну строку результатов запроса Вернитесь к таблице orders и принимайтесь за следующую строку. Повторяйте процесс, начиная с пункта 2, до тех пор, пока не переберете все заказы. Таблица ORDERS Отношение первичный ключ-внешний ключ
Таблица CUSTOMERS Вывести список всех заказов, включая номер и стоимость заказа, а также имя и лимит кредита клиента, сделавшего заказ.
Рис 7- 7. 3anpt>c, который охватывает две таблицы Таблица CUSTOMERS CUST NUM COMPANY CUST REP CREDIT LIMIT 109 106 106 $30,000 DO Таблица ORDERS
0 0/ © 0 ©. Результаты запроса/
Выполнение многотабличного запроса вручную Конечно, это не единственный способ получить результаты данного запроса; но как бы вы их ни получали, всегда будут справедливы две вещи: Каждая строка таблицы результатов запроса формируется из пары строк: одна строка находится в таблице orders, а другая - в таблице customers. Для нахождения данной пары строк производится сравнение содержимого соответствующих столбцов в этих таблицах. Простое объединение таблиц объединение по равенству) Процесс формирования пар строк путем сравнения содержимого соответствующих столбцов называется объединением таблиц. Таблица, получающаяся в результате формирования пар строк и содержащая данные из обеих таблиц, называется объединением двух таблиц. Объединение на основе точного равенства между двумя столбцами более правильно называется объединением по равенству. Объединения могут быть основаны на других видах сравнения столбцов (рассмотрены ниже в настоящей главе). Объединения представляют собой основу многотабличных запросов в SQL. В реляционной базе данных вся информация хранится в виде явных значений данных в столбцах, так что все возможные отнощения между таблицами можно сформировать, сопоставляя содержимое соответствующих столбцов. Таким образом, объединения являются мощным (и, к тому же, единственным, ввиду отсутствия указателей) средством выявления отношений, существующих между данными. Так как в SQL многотабличные запросы выполняются путем сопоставления столбцов, неудивительно, что инструкция select для многотабличного запроса должна содержать условие отбора, которое определяет взаимосвязь между столбцами. Вот инструкция select для запроса, выполненного вручную на рис. 7.2: Вывести список всех заказов, включая номер и стоимость заказа, а также имя клиента и лимит его кредита. SELECT ORDER N0M, AMOUNT, COMPANY, CREDIT LIMIT FROM ORDERS, CUSTOMERS WHERE CUST = CUST NUM
Приведенный запрос очень похож на запросы, рассмотренные в предыдущей главе однако между ними есть два отличия. Во-первых, предложение 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
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |