Вы можете также создавать запросы объединяющие более двух таблиц. Предположим, что мы хотим найти все Продаж заказчиков не находящихся в тех городах, где находятся их продавцы. Для этого необходимо связать все три наши типовые таблицы (вывод показывается в Рисунке 20):
SELECT onum, cname, Orders.cnum, Orders.snum
FROM Salespeople, Customers,Orders
WHERE Customers.citySalespeople.city
AND Orders.cnum = Customers.cnum
AND Orders.snum = Salespeople.snum;
Рисунок 20 Объединение трех таблиц
Хотя эта команда выглядит скорее как комплексная, вы можете следовать за логикой, просто проверяя — что заказчики не размещены в тех городах где размещены их продавцы (совпадение двух snum полей), и что перечисленные Продажи — выполнены с помощью этих заказчиков (совпадение Продажи с полями cnum и snum в таблице Продажи ).
Практическая часть
1. Напишите запрос который сосчитал бы все суммы приобретений на 3 Октября.
2. Напишите запрос который сосчитал бы число различных не-NULL значений поля city в таблице Заказчиков.
3. Напишите запрос который выбрал бы наименьшую сумму для каждого заказчика.
4. Напишите запрос который бы выбирал заказчиков в алфавитном порядке, чьи имена начинаются с буквы G.
5. Напишите запрос который выбрал бы высшую оценку в каждом городе.
6. Напишите запрос который сосчитал бы число заказчиков регистрирующих каждый день свои Продажи. (Если продавец имел более одного порядка в данный день, он должен учитываться только один раз.)
7. Предположим что каждый продавец имеет 12% комиссионных. Напишите запрос к таблице Продажи который мог бы вывести номер продажи, номер продавца, и сумму комиссионных продавца.
8. Напишите запрос к таблице Заказчиков который мог бы найти наивысший рейтинг в каждом городе. Вывод должен быть в такой форме:
В городе (city), наивысший рейтинг: (rating).
9. Напишите запрос который выводил бы список заказчиков в нисходящем порядке. Вывод поля оценки (rating) должден сопровождаться именем закзчика и его номером.
10.Напишите запрос который бы выводил общие Продажи на каждый день и помещал результаты в нисходящем порядке.
11.Напишите запрос который бы вывел список номеров Продаж сопровождающихся именем заказчика который создавал эти Продажи.
12.Напишите запрос который бы выдавал имя продавца и заказчика для каждой продажи после номера Продажи.
13.Напишите запрос который бы выводил всех заказчиков обслуживаемых продавцом с комиссионными выше 12% . Выведите имя заказчика, имя продавца, и ставку комиссионных продавца.
14.Напишите запрос который вычислил бы сумму комиссионных продавца для каждий продажи заказчика с оценкой выше 100.
Контрольные вопросы:
- Как объединить таблицы?
- Каким образом поместить текст в вывод запроса?
- Как работает предложение HAVING.
- Что такое агрегатные функции
ПРАКТИЧЕСКАЯ РАБОТА
Тема: Запросы SQL (3 часть)
Цель:
1. Объединение таблицы с собой
2. Вставка одного запроса внутрь другого
Оборудование и/или программное обеспечение:IBM PC,MS Access /OpenOfficedBase.
Теоретическая часть