Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
310
Добавлен:
02.04.2015
Размер:
893.44 Кб
Скачать

4.7.6. Перекрестный запрос

Пример 13.

Создание многотабличного QBE- запроса:

  • создать запрос на выборку данных из таблицы ДеталииПоставки, отобразив в динамическом наборе поля:номерп,имяд,количество.

  • преобразовать запрос на выборку в перекрестный запрос: Запрос/Перекрестный

  • отобразить в строке Групповая операциядля полейномерп и имяд слово Группировка, Sumдля поляколичество.

  • отобразить в строке ПерекрестнаятаблицаЗаголовкистолбцовдля поляномерп,Заголовкистрокдля поляимядиЗначениедля поляколичество.

Соответствующий SQL-запрос:

TRANSFORM Sum(Поставки.количество) AS [Суммарное количество]

SELECT Детали.имяд

FROM Детали INNER JOIN Поставки ON Детали.номерд = Поставки.номерд

GROUP BY Детали.имяд

PIVOT Поставки.номерп;

В результате выполнения запроса получим таблицу:

имяд

1

2

3

4

5

болт

150

150

50

150

гайка

120

100

150

ролик

150

150

150

150

шайба

200

150


4.7.7. Подчиненные (вложенные) запросы

Типы подчиненных запросов:

  • запросы, использующие сравнения, синтаксическая конструкция которых может быть такой: [ANY(любой)ALL(все)SOME(некоторые)] (инструкция SQL)

  • запросы, содержащие предложения, синтаксическая конструкция которых может быть такой: выражение [NOT]IN(инструкция SQL)

  • запросы, содержащие предложения, синтаксическая конструкция которых может быть такой: [NOT]EXISTS(инструкция SQL)

Пример 14.

Отобрать из таблицы Деталидетали, которые стоят столько же, сколькоболт. Эту задачу можно решить с помощью однотабличного подчиненного запроса.

Создание QBE- запроса:

  • создать запрос на выборку данных из таблицы Детали, отобразив в динамическом наборе данных все поля.

  • в строку Полевынести отдельно полецена, для которого выключить флажокВыводнаэкран

  • В строке  Условие отбора  написать(SELECT цена FROM Детали WHERE имяд=“болт”).

Соответствующий SQL-запрос:

SELECT Детали.*

FROM Детали

WHERE ((Детали.цена=(SELECT цена FROM Детали WHERE имяд="болт")));

Пример15. Из таблицыСотрудники(фамилия, имя, должность, зарплата)отобрать сведения о продавцах, зарплата которых превышает зарплату всех начальников и директоров.

Создание QBE-запроса:

  • создать запрос на выборку данных из таблицы Сотрудники, отобразив в динамическом наборе данных все поля.

  • в строку Полевынести отдельно полядолжность и зарплата, для которых выключить флажокВыводнаэкран

  • В строке  Условие отбора  для полядолжность написатьLIKE“продавец*”, а для полязарплатанаписать:>ALL(SELECT зарплата FROM Сотрудники WHERE (( должность LIKE “*начальник*”) OR ( должность LIKE “*директор*))).

Соответствующий SQL-запрос:

SELECT Сотрудники.*

FROM Сотрудники

WHERE должность LIKE "продавец*" AND зарплата > ALL

(SELECT зарплата FROM Сотрудники

WHERE (( должность LIKE "*начальник*") OR ( должность LIKE "*директор*")));

Таблицам, как и полям, можно давать другие имена-псевдонимы.

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

Создание QBE-запроса:

  • открыть бланк для создания запроса

  • добавить в него таблицу Детали

  • открыть окно Свойствадля полей таблицыДеталии задать для нее псевдонимD

  • отобразить в динамическом наборе данных поля (в строке Полебланка)номер детали : номерд, имя детали : имяд, цена детали: цена

  • создать в запросе вычисляемое поле без вывода его значения на экран с текстом в строке  Поле:Exists (SELECT * FROM Поставки AS P WHERE D.номерд=P.номерд);

Соответствующий SQL-запрос:

SELECT D.номерд AS [номер детали], D.имяд AS [имя детали], D.цена AS [цена детали]

FROM Детали AS D

WHERE (((Exists (SELECT * FROM Поставки AS P WHERE D.номерд=P.номерд))));

Пример17. Отобрать все поставки для деталей, не дороже 100 руб.

Эту задачу также можно решить с помощью подчиненного запроса.

Создание QBE-запроса:

  • создать запрос на выборку данных из таблицы Поставки, отобразив в динамическом наборе данных все поля.

  • в строку Полевынести отдельно поляномерд, для которого выключить флажокВыводнаэкран

  • В строке  Условие отбора  для поляномерд написатьIn (SELECT номерд FROM Детали WHERE цена <100)

Соответствующий SQL-запрос:

SELECT Поставки.*

FROM Поставки

WHERE ((Поставки.номерд In (SELECT номерд FROM Детали WHERE цена <100)));

Отбор данных можно производить с помощью фильтров, накладываемых на таблицы и формы.

Соседние файлы в папке Материалы для лабораторных Базы данных