Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Технологии_Баз_Данных_2020.docx
Скачиваний:
274
Добавлен:
01.07.2020
Размер:
1.01 Mб
Скачать

7. Деканат

Минимальный список характеристик:

  • Код группы, курс, количество студентов, общий объем часов;

  • ФИО преподавателя, вид контроля, дата;

  • Название дисциплины, категория, объем часов.

Одна группа изучает несколько дисциплин и одна дисциплина может преподаваться нескольким группам.

Категория дисциплины - гуманитарная, математическая, компьютерная, общеинженерная и т.д. Вид контроля - зачет, экзамен.

Выборки:

  • Для каждой группы определить продолжительность сессии.

SELECT Группы.Код_группы, DateDiff('d',[Группы]![Начало_сесии],[Группы]![Окончание_сессии]) AS [Продолжительность сессии] FROM Группы;

  • Определить преподавателя, который в сессию принимает экзамены (не зачеты) у наибольшего числа студентов.

SELECT Преподаватели.ФИО, Sum(Группы.Количество_студентов) AS [Sum-Количество_студентов] FROM Преподаватели INNER JOIN (Группы INNER JOIN Контроль ON Группы.Код_группы = Контроль.Группа) ON Преподаватели.Код = Контроль.Преподаватель WHERE (((Контроль.Вид_контроля)="Экзамен")) GROUP BY Преподаватели.ФИО;

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

SELECT Max(Экзамен_макс1.[Sum-Количество_студентов]) AS [Max-Sum-Количество_студентов] FROM Экзамен_макс1;

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

SELECT Экзамен_макс1.ФИО, Экзамен_макс1.[Sum-Количество_студентов] FROM Экзамен_макс1, Экзамен_макс2 WHERE (((Экзамен_макс1.[Sum-Количество_студентов])=[Экзамен_макс2]![Max-Sum-Количество_студентов]));

  • Определить, какой процент от общего объема дисциплин, изучаемых группой 'АП-17а', составляют дисциплины каждой категории.

SELECT Группы.Код_группы, Дисциплины.Категория, Sum(Дисциплины.[Объем часов]) AS [Sum-Объем часов], [Sum-Объем часов]*100/[Объем_часов] AS Процент FROM Дисциплины INNER JOIN (Группы INNER JOIN Контроль ON Группы.Код_группы = Контроль.Группа) ON Дисциплины.Код = Контроль.Дисциплина GROUP BY Группы.Код_группы, Дисциплины.Категория, Группы.Объем_часов HAVING (((Группы.Код_группы)="АП-17а"));

  • Определить, не сдает ли какая-либо группа два экзамена в один день.

SELECT Группы.Код_группы, Контроль.Дата, Count(Контроль.Код_записи) AS [Count-Код_записи] FROM Дисциплины INNER JOIN (Группы INNER JOIN Контроль ON Группы.Код_группы = Контроль.Группа) ON Дисциплины.Код = Контроль.Дисциплина WHERE (((Контроль.Вид_контроля)="Экзамен")) GROUP BY Группы.Код_группы, Контроль.Дата HAVING (((Count(Контроль.Код_записи))>1));

8. Договорная деятельность организации

Минимальный список характеристик:

  • Шифр работы, название, трудоемкость, дата завершения;

  • ФИО сотрудника, должность, табельный номер;

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

Одна и та же работа может выполняться несколькими сотрудниками и один и тот же сотрудник может участвовать в нескольких работах.

Выборки:

  • Определить те работы в 2000 г., по которым плановые сроки выполнения превышают заданную дату завершения.

SELECT Работы.Название FROM Работы INNER JOIN Поручения ON Работы.Шифр_работы = Поручения.Работа WHERE (((Работы.Дата_завершения) Between #1/1/2000# And #12/31/2000#) AND ((Поручения.Плановая_дата)>[Работы]![Дата_завершения])) GROUP BY Работы.Название;

  • Определить общее количество работ, находившихся на выполнении у некоторого сотрудника весной 1999 г.

SELECT Сотрудники.ФИО, Count(Работы.Шифр_работы) AS [Count-Шифр_работы] FROM Сотрудники INNER JOIN (Работы INNER JOIN Поручения ON Работы.Шифр_работы = Поручения.Работа) ON Сотрудники.Табельный_номер = Поручения.Сотрудник WHERE (((([Поручения]![Дата_выдачи] Between #3/1/1999# And #5/31/1999#) Or ([Поручения]![Реальная_дата] Between #3/1/1999# And #5/31/1999#) Or (([Поручения]![Дата_выдачи]<#3/1/1999#) And ([Поручения]![Реальная_дата]>#5/31/1999#)))=Yes)) GROUP BY Сотрудники.ФИО;

  • Определить те работы, которые к дате завершения были выполнены не более, чем на 50%.

SELECT Работы.Название, Sum(DateDiff('d',[Поручения]![Дата_выдачи],[Работы]![Дата_завершения])) AS Дни, Работы.Трудоемкость FROM Работы INNER JOIN Поручения ON Работы.Шифр_работы = Поручения.Работа GROUP BY Работы.Название, Работы.Трудоемкость HAVING (((Sum(DateDiff('d',[Поручения]![Дата_выдачи],[Работы]![Дата_завершения])))<[Работы]![Трудоемкость]/2));

  • Определить должностной состав сотрудников, выполняющих работу 'проект Гелиограф'.

SELECT Сотрудники.Должность, Count(Сотрудники.Табельный_номер) AS [Count-Табельный_номер] FROM Сотрудники INNER JOIN (Работы INNER JOIN Поручения ON Работы.Шифр_работы = Поручения.Работа) ON Сотрудники.Табельный_номер = Поручения.Сотрудник WHERE (((Работы.Название)="Проект Гелиограф")) GROUP BY Сотрудники.Должность;