Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SC_sem6_2012_BD_w1.doc
Скачиваний:
0
Добавлен:
25.09.2019
Размер:
1.46 Mб
Скачать

3.2 Запросы на выборку

Теперь создадим необходимые «Запросы» для работы с данными базы данных. Перед тем как писать запросы, введем одно допущение: будем считать, что данные таблицы «Сессия» были сгенерированы каким-то механизмом, который в данной базе не отражен. Это означает, что все студенты, попавшие в эту таблицу, были допущены до сдачи сессии деканатом, несмотря на то, что у них могут быть не сданные зачеты. В связи с этим, будем считать успевающими тех студентов, которые закрыли текущую сессию без двоек.

В соответствии с техническим заданием база данных должна поддерживать следующие запросы:

  • Вывод списков групп;

  • Результаты экзаменов по каждой группе;

  • Список студентов, не сдавших определенный экзамен;

  • Список студентов, обучающихся за границей;

  • Успевающие студенты.

Сначала реализуем наиболее простые запросы из списка. Таковыми являются, запрос на простой вывод списков групп (первый запрос) и запрос на список студентов, обучающихся за границей (четвертый запрос).

Для создания запроса следует перейти на ленте в раздел «Создание» и нажать на кнопку «Конструктор запросов» в блоке «Другие». Появится рабочее поле, в которое будет предложено поместить таблицы, из которых будут извлекаться данные. В списке мы желаем отразить номер зачетки студента, его полные инициалы, год обучения, принадлежность к группе, кафедре и специальности. Таким образом, следует поместить таблицы «Студенты», «Группы факультета» и «Кафедры». Так как таблицы уже связаны во внутренней структуре, ничего не остается как просто выбрать нужные поля, щелкая дважды по их именам в соответствующих таблицах. На рисунке 3.4 показан графический вариант запроса на выборку студентов. Студентов будем сортировать по году обучения, поэтому в поле «Сортировка», в группе «Год обучения», из списка выбираем «по возрастанию».

Рисунок 3.4 Запрос «Список студентов»

Протестируем запрос, нажав на кнопку «Выполнить» в разделе «Конструктор». Результат запроса показан на рисунке 3.5.

Рисунок 3.5 Вывод списка групп по запросу

Сохраним данный запрос и создадим новый. Теперь нужно вывести студентов, обучающихся за границей, т.е. данный запрос имеет условие, которым следует руководствоваться в выборке. В данном запросе мы хотим отразить год обучения, номер группы, номер зачетной книжки и полные инициалы студента. Добавим в рабочую область таблицы созданный нами ранее запрос «Список студентов, дабы воспользоваться уже готовой выборкой, и таблицу «Студенты». Несложно заметить, что запрос и таблица связаны по ключевому атрибуту. Добавим нужные нам атрибуты и атрибут, которого нет в запросе, «Обучение за границей». Отключим его отображение, так как мы и так знаем, что в списке все студенты обучаются за границей. В поле «условие отбора» запишем критерий отбора в виде слова «Истина», так как в домене атрибута хранятся логические данные. Запрос примет вид, показанный на рисунке 3.6. Запустив его, мы получим результат рисунка 3.7.

Рисунок 3.6 Запрос «Студенты за границей»

Рисунок 3.7 Вывод студентов, обучающихся за границей

Последующие запросы будут походить на предыдущий запрос, но с уже более сложными условиями.

Так, создадим новый запрос, в котором будут отражены результаты текущего учебного года по каждому студенту. Делается он подобно предыдущим. Конструктор запроса показан на рисунке 3.8, а вывод на рисунке 3.9.

Теперь создадим четыре запроса опирающихся на запрос рисунка 3.8:

  • Запрос на выборку результатов одного студента;

  • Запрос на выборку результатов группы студентов;

  • Общий список неуспевающих студентов;

  • Список неуспевающих студентов по дисциплине.

На рисунке 3.10, 3.11, 3.12 и 3.13 соответственно показаны конструкторы данных запросов. Результаты их работы будут показаны в следующей главе.

Рисунок 3.8 Запрос «Результаты текущего года»

Рисунок 3.9 Вывод запроса «Результаты текущего года»

Рисунок 3.10 Запрос «Результат по студентам»

Рисунок 3.11 Запрос «Результат по группам»

Рисунок 3.12 Запрос «Общий список неуспевающих студентов»

Рисунок 3.13 Запрос «Неуспевающие студенты по дисциплине»

Отметим, что, чтобы данные запросы были интерактивными, в поля с условием нужной колонки нужно вводить в квадратных скобках текст диалогового окна. Например, [Введите ФИО студента].

Наконец, создадим запрос на выборку успевающих случаев. В общем случае, это не тривиальная задача, потому что вычислить студентов становится труднее, когда один студент имеет несколько результатов. Например, обычный запрос примет студента, провалившего всего один экзамен из нескольких (два и больше), за успевающего, если ввести простое условие >2.

Выйти в таких ситуациях помогают, так называемые, «запросы на записи без подчиненных». Их смысл в том, что выборка производится по совпадению одного или нескольких полей разных таблиц. Так как у нас есть уже запрос на общий список неуспевающих студентов (рисунок 3.12), то нам остается исключить тех, кто в нем находится, из потока таблицы «Сессия». На рисунке 3.14 представлен запрос без подчиненных на список успевающих студентов.

Рисунок 3.14 Запрос на список «Успевающих студентов»

Следует отметить, что данный запрос отличает наличие внешнего объединения, представленного в виде стрелочки, идущей от таблицы «Сессия» к запросу «Неуспевающие студенты». Данная стрелочка говорит, что все записи из таблицы как бы «перетекают» в запрос, независимо от того, найдут ли они там себе пару или нет. Так как мы знаем, что в запросе нет успевающих студентов, то условие здесь строится на выборе не объединившихся записей (условие Is Null). Однако, следует иметь ввиду, что студенты могут иметь несколько экзаменов, а значит один успевающий студент будет иметь несколько записей, что в общем случае не является нашей целью. Нашей задачей является показать реальное количество успевающих студентов без всяких повторений.

Чтобы решить данную проблему, воспользуемся языком запросов SQL. На вкладке нашего запроса щелкнем правой кнопкой мыши и выберем пункт «режим SQL» (рисунок 3.15). Перед нами появится редактор SQL запросов. Для удаления повторений, введем директиву DISTINCT в процедуру SELECT. Сохраним запрос и запустим его.

Для простоты покажем только зачетки успевающих студентов (рисунок 3.16).

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

Рисунок 3.15 Редактор SQL запросов

Рисунок 3.16 Список успевающих студентов

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]