Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ИОСУ(БД) Казаковцева.doc
Скачиваний:
15
Добавлен:
13.05.2015
Размер:
866.3 Кб
Скачать
  1. Задания по составлению запросов для самостоятельного выполнения

      1. Получить наименования всех проектов в определенном городе.

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

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

      4. Подсчитать количество поставок, осуществляемых определенным поставщиком.

      5. Подсчитать общий вес всех деталей, участвующих в определенном проекте.

      6. Подсчитать количество поставок, осуществляемых каждым поставщиком.

      7. Получить наименования всех проектов, которые получают детали от определенного поставщика и количества поставок для каждого проекта, осуществляемых этим поставщиком для каждого проекта.

  2. Содержание отчета

Отчет должен содержать описание всех выполненных запросов, тексты запросов на языке SQL, ответы на контрольные вопросы. К отчету прилагается файлMSAccess(*.mdb), включающий все запросы, созданные в лабораторной работе.

  1. Контрольные вопросы

      1. Поясните последовательность выполнения запроса п. 3.2

      2. Что такое предикат?

      3. Что такое агрегатная функция? Приведите примеры.

Лабораторная работа №3. Оператор SELECTязыкаSQL. Вложенные запросы. Операция условного соединенияJOIN.

    1. Цель работы

Целью лабораторной работы является изучение возможностей оператора SELECTязыкаMicrosoftJetSQLпо созданию вложенных запросов и применению операции условного соединенияJOINв СУБДAccessдля разработанной в лабораторной работе №2 базы данных «Предприятие».

  1. Порядок выполнения работы

      1. Подсчитать количество поставщиков, которые обеспечивают данный проект:

SELECT count(*)

FROMПоставщики

WHEREПоставщики.Номер_поставщикаIN

(SELECTПоставки.Номер_поставщикаFROMПоставки,ПроектыWHEREПроекты.Номер_проекта=Поставки.Номер_проектаANDПроекты.Наименование="<Наименование_проекта>");

Данную задачу можно выполнить только с использованием вложенных запросов. Здесь внутренний запрос получает множество номеров поставщиков, обеспечивающих определенный проект. При этом в результате внутреннего запроса номера поставщиков могут дублироваться, так как один и тот же поставщик может осуществлять несколько поставок для одного и того же проекта. В задании же необходимо подсчитать количество различных поставщиков. Для этого внешний запрос выбирает из таблицы «Поставщики» номера только тех поставщиков, которые входят во множество, получаемое внутренним запросом. Принадлежность к множеству проверяется при помощи предиката IN. Количество выбранных номеров подсчитывается при помощи агрегатной функцииcount(*).

      1. В предыдущем запросе результат внутреннего запроса являлся результатом условного соединения таблиц «Поставки» и «Проекты». Для выполнения той же операции можно воспользоваться специальным выражением IINNERJOIN.

SELECT count(*)

FROMПоставщики

WHEREПоставщики.Номер_поставщикаIN

(SELECTПоставки.Номер_поставщикаFROMПоставкиINNER JOINПроектыON(Проекты.Номер_проекта=Поставки.Номер_проектаANDПроекты.Наименование="<Наименование_проекта>"));

      1. На основе предыдущего запроса несложно написать запрос, который будет выводить информацию о количестве поставщиков для всех проектов.

SELECTP.Наименование,Count(*)

FROMПроектыASP, Поставщики

WHEREПоставщики.Номер_поставщикаIN

(SELECTПоставки.Номер_поставщикаFROMПоставки,ПроектыASProjectsWHERE(Projects.Номер_проекта=Поставки.Номер_проектаAND Projects.Наименование = P.Наименование))

GROUP BYP.Наименование;

Внешний запрос создает декартово произведение таблиц «Проекты» и «Поставщики», из которого по полю «Номер_поставщика» при помощи внутреннего запроса отбираются только те пары Проект-Поставщик, для которых существует запись в таблице «Поставки» с соответствующим номером поставщика.

      1. Аналогично можно подсчитать количество различных используемых деталей для каждого проекта:

SELECTP.Наименование,Count(*)

FROMПроектыASP, Детали

WHEREДетали.Номер_деталиIN

(SELECTПоставки.Номер_деталиFROM Поставки, ПроектыASProjectsWHERE(Projects.Номер_проекта = Поставки.Номер_проектаANDProjects.Наименование = P.Наименование))

GROUP BYP.Наименование;