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

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)));

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