Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Министерство образования и науки РФ
Новосибирский государственный технический университет
Кафедра ВТ
Лабораторная работа №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 Результат выполнения запроса
Вывод: Изучила средства быстрого поиска информации в базе данных, научилась создавать запросы, производить различные вычисления над полями, выбираемыми из таблиц, осуществлять группировку полей запроса. Были получены знания по SQL-запросам, а также многотабличном связывании.


