- •1. Библиотека
- •2. Университет
- •3. Оптовая база
- •4. Производство
- •5. Сеть магазинов
- •6. Авторемонтные мастерские
- •7. Деканат
- •8. Договорная деятельность организации
- •9. Поликлиника
- •10. Телефонная станция
- •11. Спорт
- •12. Сельскохозяйственные работы
- •13. Городской транспорт
- •14. География
- •16. Аэропорт
- •17. Персональные эвм
- •19. Зоопарк
- •20. Шахматы
- •21. Судоходство.
- •22. Научные конференции.
- •23. Программные продукты.
- •24. Операционная система
- •25. Добыча полезных ископаемых
- •26. Автотранспортное предприятие
- •28. Справочная аптек
- •30. Изучение студентами дисциплин по выбору.
1. Библиотека
Минимальный список характеристик:
-
Автор книги, название, год издания, цена, количество экземпляров, краткая аннотация;
-
номер читательского билета, ФИО, адрес и телефон читателя, дата выдачи книги читателю и дата сдачи книги читателем, отметка о выбытии.
Книга имеет много экземпляров и поэтому может быть выдана многим читателям.
Выборки:
-
Выбрать читателей, которые имеют задолженность более 4 месяцев.
SELECT Читатели.ФИО, Выдача.Дата_выдачи, Книги.Название FROM Читатели INNER JOIN (Книги INNER JOIN Выдача ON Книги.[Шифр книги] = Выдача.Щифр_книги) ON Читатели.Номер_билета = Выдача.Номер_билета WHERE (((DateDiff("m",[Выдача]![Дата_сдачи],Date()))>4) AND ((IsNull([Выдача]![Дата_сдачи_факт]))=Yes));
-
Определить книгу, которая была наиболее популярной весной 2000 года.
SELECT Книги.[Шифр книги], Count(Выдача.Дата_выдачи) AS [Count-Дата_выдачи], Книги.Автор, Книги.Название FROM Книги INNER JOIN Выдача ON Книги.[Шифр книги] = Выдача.Щифр_книги WHERE (((Выдача.Дата_выдачи) Between #3/1/2000# And #5/31/2000#)) GROUP BY Книги.[Шифр книги], Книги.Автор, Книги.Название;
-
Определить читателей, у которых на руках находятся книги на общую сумму более 100 руб.
SELECT Читатели.ФИО, Sum(Книги.Цена) AS [Sum-Цена] FROM Читатели INNER JOIN (Книги INNER JOIN Выдача ON Книги.[Шифр книги] = Выдача.Щифр_книги) ON Читатели.Номер_билета = Выдача.Номер_билета WHERE (((IsNull([Выдача]![Дата_сдачи_факт]))=Yes)) GROUP BY Читатели.ФИО HAVING (((Sum(Книги.Цена))>100));
-
Выбрать книгу, для которой наибольшее количество экземпляров находится "на полках" (не выданы читателям).
Вот тут в моей базе имеются два варианта решения. Один образовался из-за того, что я сделал поле "Выдано" в таблице книг. В этом случае достаточно двух запросов:
В первом я ищу максимальную разницу между двумя полями таблицы «Книги» - «Количество» и «Выдано». Результат – сколько лежит на полке.
Текст
SELECT Max([Количество]-[Выдано]) AS [Не выдано]
FROM Книги;
Второй – обычный запрос на выборку, условие для отбора – нужно, чтобы разница между количеством экземпляров и количеством выданных книг совпадала с максимальным количеством из первого запроса.
SELECT Книги.Автор, Книги.Название, [Книги]![Количество]-[Книги]![Выдано] AS [Не выдано]
FROM Книги, [Не выдано 1]
WHERE ((([Книги]![Количество]-[Книги]![Выдано])=[Не выдано 1]![Не выдано]));
Но, вообще-то, это читерство)) Думаю, что ожидается не такой результат, поэтому будем решать так, как будто поля «Выдано» в таблице книг нет.
2. Университет
Минимальный список характеристик:
-
Номер, ФИО, адрес и должность преподавателя, ученая степень;
-
код, название, количество часов, тип контроля и раздел предмета (дисциплины);
-
код, название, номер заведующего кафедрой;
-
номер аудитории, где преподаватель читает свой предмет, дата, время, группа.
Один преподаватель может вести несколько дисциплин и одна дисциплина может вестись несколькими преподавателями.
Примечание: Циклы дисциплин: гуманитарный, общеинженерный, математический, компьютерный и т.д.
Выборки:
-
Выбрать преподавателя, который был "без работы" весной 2001г.
SELECT Преподаватели.ФИО FROM Преподаватели WHERE (((Преподаватели.Номер) Not In (SELECT Преподаватели.Номер FROM Преподаватели LEFT JOIN Расписание ON Преподаватели.Номер = Расписание.Преподаватель WHERE (((Расписание.Дата) Between #3/1/2001# And #5/31/2001#)) GROUP BY Преподаватели.Номер)));
Тут выбираются преподаватели, которых нет (Not In) в списке преподов, работавших весной 2001 года (то есть у них нет записей в таблице «Расписание» за указанный период).
-
Определить возможные "накладки" аудиторий в расписании.
SELECT Расписание.Дата, Расписание.Время, Расписание.Аудитория, Count(Расписание.[Код записи]) AS [Count-Код записи] FROM Расписание GROUP BY Расписание.Дата, Расписание.Время, Расписание.Аудитория HAVING (((Count(Расписание.[Код записи]))>1));
SELECT Расписание.Дата, Расписание.Время, Расписание.Аудитория, Расписание.Группа, Расписание.Преподаватель, Расписание.Предмет FROM Расписание, Накладки WHERE (((Расписание.Дата)=[Накладки]![Дата]) AND ((Расписание.Время)=[Накладки]![Время]) AND ((Расписание.Аудитория)=[Накладки]![Аудитория]));
-
Вывести расписание занятий группы 'АП-17а' на март 2001г.
SELECT Расписание.Дата, Расписание.Время, Расписание.Аудитория, Расписание.Предмет, Расписание.Преподаватель FROM Группы INNER JOIN Расписание ON Группы.[Код группы] = Расписание.Группа WHERE (((Расписание.Дата) Between #3/1/2001# And #3/31/2001#) AND ((Группы.Название)="АП17а"));
-
Определить для каждой группы долю дисциплин каждого цикла в процентах.
SELECT [Предметы группы].Группа, Предметы.[Цикл предмета], Count([Предметы группы].[Предмет])*100/[Count-Предмет] AS [Процент предметов] FROM [Всего предметов] INNER JOIN (Группы INNER JOIN (Предметы INNER JOIN [Предметы группы] ON Предметы.[Код предмета] = [Предметы группы].Предмет) ON Группы.[Код группы] = [Предметы группы].Группа) ON [Всего предметов].Группа = Группы.[Код группы] GROUP BY [Предметы группы].Группа, Предметы.[Цикл предмета], [Всего предметов].[Count-Предмет];