Министерство образования и науки РФ
Новосибирский государственный технический университет
Кафедра ВТ
Лабораторная работа №5
по дисциплине «Базы данных»
Вариант 10
Группа: АМ-411
Студент: Гребенникова М.Ю.
Преподаватель: Трошина Г.В.
Новосибирск, 2007
Цель работы: Изучить средства быстрого поиска информации в базе данных и получение ответов на разнообразные запросы в среде FoxPro. Изучение конструктора запросов FoxPro. Научиться создавать запросы любого уровня сложности, производить различные вычисления над полями, выбираемыми из таблиц, осуществлять группировку полей запроса.
Задание: Выполнить выбор записей по диапазону значений для БД. Провести вычисление итоговых значений. Осуществить выборку из нескольких таблиц. Использовать результаты запроса для создания диаграмм Провести упорядочение данных в запросе по нескольким полям. Организовать вывод результатов запроса в таблицу, на экран, в отчет. Продемонстрировать приобретённые навыки построения многотабличных запросов.
Индивидуальное задание: Выполнить запросы: вывод минимального, максимального и среднего значения возраста для студентов 1 и 3 курсов факультета ФТФ. Вывод фамилий студентов, получающих стипендию до 300 рублей, кроме обучающихся на 2 курсе факультетов РЭФ и АВТ. Вывод фамилий всех студентов, кроме обучающихся на факультетах ФТФ и ФЭН. Выборка фамилий всех студентов, обучающихся на 1 курсе факультетов АВТ и РЭФ.
Для выполнения данной работы добавим к проекту еще 2 таблицы (рис.1): facult & stipend, хранящие данные о факультетах и размерах стипендий, соответственно.
Рис.1 Структура БД
Рис.2 Запросы к БД
Кнопки «Студенты», «Факультеты», «Стипендия» предназначены для вывода на экран содержимого соответствующих таблиц. Кнопка «Общая таблица» объединяет все вышеназванные таблицы:
SELECT biblio.фамилия, biblio.имя, biblio.отчество, biblio.дата_рождения,;
facult.факультет, biblio.группа, biblio.курс,;
biblio.номер_билета, stipend.стипендия, biblio.учебник, biblio.автор, biblio.стоимость;
FROM bibl!biblio;
INNER JOIN bibl!stipend ON biblio.id_stipend = stipend.id_stipend;
INNER JOIN bibl!facult ON biblio.id_faculty = facult.id_facult
Рис.3 Результат объединения таблиц
Запрос №1: Выборка фамилий всех студентов, обучающихся на 1 курсе факультетов АВТ и РЭФ.
select фамилия, имя, отчество, курс,facult.факультет;
from biblio;
INNER JOIN bibl!facult ON biblio.id_faculty = facult.id_facult;
where (курс = 1) and (facult.факультет = 'АВТ' or facult.факультет = 'РТФ')
Рис.4 Запрос №1
Запрос №2: Вывод фамилий всех студентов, кроме обучающихся на факультетах ФТФ и ФАМ.
select фамилия, имя, отчество,facult.факультет;
from biblio;
INNER JOIN bibl!facult ON biblio.id_faculty = facult.id_facult;
where not (facult.факультет = 'ФАМ' or facult.факультет = 'ФТФ')
Рис.5 Запрос №2
Запрос №3: Вывод фамилий студентов, получающих стипендию до 300 рублей, кроме обучающихся на 2 курсе факультетов РТФ и АВТ.
SELECT biblio.фамилия, biblio.имя, biblio.отчество, biblio.дата_рождения,;
facult.факультет, biblio.группа, biblio.курс,;
biblio.номер_билета, stipend.стипендия, biblio.учебник, biblio.автор, biblio.стоимость;
FROM bibl!biblio;
INNER JOIN bibl!stipend ON biblio.id_stipend = stipend.id_stipend;
INNER JOIN bibl!facult ON biblio.id_faculty = facult.id_facult;
where (not(biblio.курс = 2) and not(facult.факультет = 'АВТ' or facult.факультет = 'РТФ')) and (stipend.стипендия < 300)
Рис.5 Запрос №3
Вывод минимального значения возраста для студентов 1 и 3 курсов факультета ФТФ:
SELECT (year(date()) - max(year(biblio.дата_рождения))) as "Min_возраст_ФТФ";
FROM bibl!biblio;
INNER JOIN bibl!facult ON biblio.id_faculty = facult.id_facult;
WHERE (facult.факультет = 'ФТФ') and (курс = 1 or курс = 3)
Рис.6 Минимальный возраст студентов 1 и 3 курсов факультета ФТФ.
Вывод максимального значения возраста студентов 1 и 3 курсов факультета ФТФ:
SELECT (year(date()) - min(year(biblio. дата_рождения))) as "Max_ возраст_ФТФ ";
FROM bibl!biblio;
INNER JOIN bibl!facult ON biblio.id_faculty = facult.id_facult;
WHERE (facult. факультет = 'ФТФ') and (курс = 1 or курс = 3)
Рис.7 Максимальный возраст
Вывод среднего значения возраста студентов 1 и 3 курсов факультета ФТФ:
SELECT (year(date()) - avg(year(biblio. дата_рождения))) as "Max_ возраст_ФТФ ";
FROM bibl!biblio;
INNER JOIN bibl!facult ON biblio.id_faculty = facult.id_facult;
WHERE (facult. факультет = 'ФТФ') and (курс = 1 or курс = 3)
Рис.7 Средний возраст студентов
Работа с конструктором запросов
Те же задания выполним с помощью конструктора запросов и сравним результаты с полученными ранее.
Выборка фамилий всех студентов, обучающихся на 1 курсе факультетов АВТ и РТФ.
Откроем окно конструктора запросов и добавим в него таблицы Biblio и Facult, при этом устанавливая связь между ними (рис.8). Во вкладке Fields выберем поля, которые будут отображаться в запросе и с помощью команды ADD перенесем их в область Selected Fields.
Рис. Окно конструктора запросов
Во вкладке Filter введем условия, в соответствии с которыми будут выводиться данные (рис.8). В нашем случае это следующие условия: курс = 1, факультет = «АВТ» or «РТФ»
Рис.8 Вкладка Filter
На панели инструментов Query Designer выберем кнопку SQL. Это даст нам возможность посмотреть код.
SELECT Biblio.фамилия, Biblio.имя, Biblio.отчество, Biblio.курс,;
Facult.факультет;
FROM bibl!biblio INNER JOIN bibl!facult ;
ON Biblio.id_faculty = Facult.id_facult;
WHERE Biblio.курс = 1;
AND Facult.факультет = "АВТ";
OR (Facult.факультет = "РТФ");
ORDER BY Biblio.фамилия
Рис. 9 Результат выполнения запроса
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.