- •Лабораторные работы по курсу иосу
- •Лабораторная работа №1. Проектирование реляционной базы данных в субд Access.
- •Цель работы
- •Описание базы данных
- •Порядок выполнения работы
- •Содержание отчета
- •Порядок выполнения работы
- •Задания по составлению запросов для самостоятельного выполнения
- •Содержание отчета
- •Задания по составлению запросов для самостоятельного выполнения
- •Содержание отчета
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа № 5. Инфологическое моделирование с использованием пакета eRwin
- •Цель работы
- •Порядок выполнения работы
- •Контрольные вопросы
Задания по составлению запросов для самостоятельного выполнения
Получить наименования всех проектов в определенном городе.
Получить наименования, материалы и веса деталей, поставляемых определенным поставщиком.
Получить наименования всех проектов, в которых используется определенная деталь (без повторений).
Подсчитать количество поставок, осуществляемых определенным поставщиком.
Подсчитать общий вес всех деталей, участвующих в определенном проекте.
Подсчитать количество поставок, осуществляемых каждым поставщиком.
Получить наименования всех проектов, которые получают детали от определенного поставщика и количества поставок для каждого проекта, осуществляемых этим поставщиком для каждого проекта.
Содержание отчета
Отчет должен содержать описание всех выполненных запросов, тексты запросов на языке SQL, ответы на контрольные вопросы. К отчету прилагается файлMSAccess(*.mdb), включающий все запросы, созданные в лабораторной работе.
Контрольные вопросы
Поясните последовательность выполнения запроса п. 3.2
Что такое предикат?
Что такое агрегатная функция? Приведите примеры.
Лабораторная работа №3. Оператор SELECTязыкаSQL. Вложенные запросы. Операция условного соединенияJOIN.
Цель работы
Целью лабораторной работы является изучение возможностей оператора SELECTязыкаMicrosoftJetSQLпо созданию вложенных запросов и применению операции условного соединенияJOINв СУБДAccessдля разработанной в лабораторной работе №2 базы данных «Предприятие».
Порядок выполнения работы
Подсчитать количество поставщиков, которые обеспечивают данный проект:
SELECT count(*)
FROMПоставщики
WHEREПоставщики.Номер_поставщикаIN
(SELECTПоставки.Номер_поставщикаFROMПоставки,ПроектыWHEREПроекты.Номер_проекта=Поставки.Номер_проектаANDПроекты.Наименование="<Наименование_проекта>");
Данную задачу можно выполнить только с использованием вложенных запросов. Здесь внутренний запрос получает множество номеров поставщиков, обеспечивающих определенный проект. При этом в результате внутреннего запроса номера поставщиков могут дублироваться, так как один и тот же поставщик может осуществлять несколько поставок для одного и того же проекта. В задании же необходимо подсчитать количество различных поставщиков. Для этого внешний запрос выбирает из таблицы «Поставщики» номера только тех поставщиков, которые входят во множество, получаемое внутренним запросом. Принадлежность к множеству проверяется при помощи предиката IN. Количество выбранных номеров подсчитывается при помощи агрегатной функцииcount(*).
В предыдущем запросе результат внутреннего запроса являлся результатом условного соединения таблиц «Поставки» и «Проекты». Для выполнения той же операции можно воспользоваться специальным выражением IINNERJOIN.
SELECT count(*)
FROMПоставщики
WHEREПоставщики.Номер_поставщикаIN
(SELECTПоставки.Номер_поставщикаFROMПоставкиINNER JOINПроектыON(Проекты.Номер_проекта=Поставки.Номер_проектаANDПроекты.Наименование="<Наименование_проекта>"));
На основе предыдущего запроса несложно написать запрос, который будет выводить информацию о количестве поставщиков для всех проектов.
SELECTP.Наименование,Count(*)
FROMПроектыASP, Поставщики
WHEREПоставщики.Номер_поставщикаIN
(SELECTПоставки.Номер_поставщикаFROMПоставки,ПроектыASProjectsWHERE(Projects.Номер_проекта=Поставки.Номер_проектаAND Projects.Наименование = P.Наименование))
GROUP BYP.Наименование;
Внешний запрос создает декартово произведение таблиц «Проекты» и «Поставщики», из которого по полю «Номер_поставщика» при помощи внутреннего запроса отбираются только те пары Проект-Поставщик, для которых существует запись в таблице «Поставки» с соответствующим номером поставщика.
Аналогично можно подсчитать количество различных используемых деталей для каждого проекта:
SELECTP.Наименование,Count(*)
FROMПроектыASP, Детали
WHEREДетали.Номер_деталиIN
(SELECTПоставки.Номер_деталиFROM Поставки, ПроектыASProjectsWHERE(Projects.Номер_проекта = Поставки.Номер_проектаANDProjects.Наименование = P.Наименование))
GROUP BYP.Наименование;