Практическая работа № 6. Запросы

Цель работы: изучение и закрепление на практике методов формирования и использования запросов для выборки и/или модификации данных в таблицах.

Методические указания

Вопросы, которые формируются средствами СУБД к одной или нескольким таблицам, называются запросами. Они позволяют:

· формировать сложные критерии для выбора записей из одной или нескольких таблиц;

· указывать поля, которые должны быть отображены для выбранных записей;

· редактировать группы записей, удовлетворяющих определенным критериям;

· выполнять вычисления с использованием выбранных данных.

Очевидно, что запросы перекрывают возможности фильтрации, т.е. являются более мощным инструментом обработки данных в БД.

В СУБД Access используется методология «Запрос по образцу» (Query by Example или QBE), включающая форму (бланк) запроса и специальный язык для её заполнения.

Переход к формированию запроса реализуется путем перехода на вкладку Создание конкретной БД. В опции Другие СУБД предлагает различные варианты реализации запросов. Наиболее эффективным является режим Конструктор запросов. В открывшемся окне Добавление таблицы выбирается требуемая таблица и нажимается кнопка Добавить. На экране появляется бланк запроса (рисунок 6.1), представляющий набор пустых столбцов, каждый из которых содержит фиксированный набор ячеек.

Рисунок 6.1

Исходно бланк запроса пуст. Для занесения конкретного поля в бланк необходимо двойным щелчком левой клавиши мыши поместить его в первый свободный столбец бланка или перетащить его мышью (при нажатой ЛКМ).

Полная очистка бланка при его переформировании может быть выполнена командой Удалить панели Главная меню. Очистка конкретного столбца проводиться путем его выделения и выбора в контекстном меню опции Вырезать.

Запуск запроса на выполнение осуществляется опцией Режим таблицы панели Главная или нажатием кнопки на панели инструментов Конструктор.

Сохранение запроса для дальнейшего использования производится командой Сохранить контекстного меню. Затем СУБД запрашивает имя сохраняемого запроса. Целесообразно, чтобы оно имело смысловую нагрузку, что облегчит дальнейшее использование запроса.

Самое главное в запросе - критерии выборки, которые вводятся в строку Условие отбора. Можно выделить следующие типы запросов на основе критериев:

· Выборка по строгому совпадению. В строку Условие отбора для определенного поля вводится одно из значений, существующих в таблице. Например, название конкретного товара или название фирмы, города. Данные запросы можно параметризовать, т.е. вводить условия отбора в виде параметра при каждом запуске запроса, что устраняет необходимость предварительной его модификации. Для параметризации необходимо в строке Условие отбора вместо самого условия ввести текст приглашения на его ввод по формату: [<текст приглашения>], например [ Введите условие отбора]. При запуске параметризованного запроса появляется диалоговое окно (рисунок 6.2), в котором пользователь должен ввести собственно условие отбора (например, ФАПУ) и нажать клавишу ОК.

Рисунок 6.2

· Выборка по строгому несовпадению. В этом случае в выборку отбираются все записи таблицы, кроме записей, содержащих значение, указанное в строке Условие отбора. Для реализации данного запроса перед значением вводится префикс Not или <>. Например, Not "МТФ" в поле Факультет запроса к таблице СТУДЕНТЫ приведет к выборке всех студентов вуза, кроме студентов МТФ.

· Выборка по неточному совпадению. Для выборки записей в условиях неполноты знаний о требуемых значениях используется оператор Like <условие>. Само <условие> образуется следующими подстановочными символами:

o? - любой один символ;

o - любое количество символов (0 - ¥);

o # - любая одна цифра;

o [список_символов] - любой символ из списка;

o [!список_символов] - любой символ, не входящий в список;

В списке можно указывать сразу диапазон символов, Например, [Г-Л] или [г-лГ-Л].

Примеры использования оператора Like в поле ФИО таблицы СТУДЕНТЫ:

Like?????????? - выбираются все студенты, ФИО которых содержит 10 символов;

Like "В?????????" - выбираются все студенты, ФИО которых содержит 10 символов и начинается на букву "В";

Like "В*" - выбираются все студенты, ФИО которых начинается на букву "В". Длина ФИО произвольная;

Like "[ВД]*" - выбираются все студенты, ФИО которых начинается на буквы "В" или "Д". Длина ФИО произвольная;

Like "[В-М]*" - выбираются все студенты, ФИО которых начинается на буквы от "В" до "М". Длина ФИО произвольная.

· Выборка по диапазону. Для формирования данных условий выбора используются операторы сравнения >, >=, <, <= и <>. Операции сравнения могут связываться логическими операциями And (И) и Or (ИЛИ). Для этих же целей используется оператор диапазона Between <нижнее_значение> and < верхнее_значение >. Например, выбор книг стоимостью от 100 до 200 рублей может быть реализован через ввод в запросе условия в поле Стоимость в виде >=100 and <=200 или Between 100 and 200.

Перечень значений в условии выборки можно задать и оператором In (значение, значение,...). Например, выбор студентов факультетов МТФ или ФАПУ можно реализовать, указав в поле Факультет запроса условие In ("МТФ", "ФАПУ"). Это же условие можно записать и через операцию ИЛИ: "МТФ" or "ФАПУ". Также можно указать одно название факультета в строке Условие отбора (см. рисунок 6.1), а второе в следующей строке или. Число строк или не ограничено, т.е. использование первой из них приводит к появлению следующей пустой и т.д..

Для выбора записей с пустыми значениями в некотором поле надо в соответствующем поле бланка запроса указать оператор Is Null. Наоборот, записи с непустыми значениями в данном поле выбираются по оператору Is not Null.

В выражениях отбора также можно использовать знаки математических операций +, -, /, * и неограниченное число круглых скобок. Сложные выражения в условиях отбора могут формироваться с помощью соответствующего построителя, который вызывается кнопкой на панели инструментов Конструктор в опции Настройка запроса.

· Запрос с вычислениями. Такой запрос позволяет получить дополнительную информацию в процессе выборки, например, стоимость всей партии товара при хранимой в таблице информации о количестве товара и стоимости единицы его продукции. Для этого в строку Поле пустого столбца заносят выражение для вычисления по следующему формату:

<Название_формируемого_поля>:<выражение>.

В <выражении> можно использовать знаки арифметических операций, круглые скобки и имена полей в []. Например, стоимость партии можно вычислить по выражению:

Стоимость партии:[количество товара]*[стоимость единицы товара]

Если используется поле другой таблицы, то в префиксе через! указывается имя данной таблицы. Например:

Стоимость партии:[Товар]![количество товара]*[стоимость единицы товара]

· Запрос с групповыми операциями. Рассмотренные запросы анализируют отдельные записи таблицы. Вместе с тем, СУБД Access позволяет находить интегральные показатели для групп записей в таблице. Каждая такая группа характеризуется одинаковым значением по какому-то полю, например, одинаковым названием факультета или семейным положением. Для перехода в данный режим запросов необходимо на панели инструментов нажать клавишу Итоги в опции Показать или скрыть панели Конструктор, что приведет к появлению в бланке запроса новой строки с названием Групповая операция. В ячейках данной строки указывается или режим группировки по некоторому полю (опция Группировка), или название групповой операции:

o Sum - сумма значений;

o Avg - среднее значение по данному полю для всей группы;

o Count - число записей в данной группе;

o Max - максимальное значение поля в каждой группе;

o Min - манимальное значение поля в каждой группе;

o First - первое значение данного поля в каждой группе;

o Last - последнее значение данного поля в каждой группе и др.

Опции выбора вызываются нажатием кнопки раскрытия в требуемой ячейке.

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

Рассмотренные запросы не меняют содержимое исходной таблицы. Для изменения содержимого исходной таблицы или создания новой СУБД Access использует четыре следующих запроса:

· Запрос-создание новой таблицы. Предназначен для сохранения результатов запроса в виде новой таблицы. Исходно формируется обычный запрос на выборку необходимой информации из таблицы. После проверки результатов его выполнения производится возврат в режим конструктора запросов. Далее в опции Тип запроса панели инструментов Конструктор выбирается опция Тип запроса: создание таблицы. В появившемся окне Создание таблицы вводится её имя и место расположения (например, в текущей базе данных). Указывается имя создаваемой таблицы и нажимается кнопка ОК. Непосредственно запрос на создание запускается нажатием кнопки на панели инструментов. В списке таблиц БД появляется пиктограмма созданной таблицы.

· Запрос-добавление выборки в другую таблицу. Выборку можно добавить к другой таблице, однотипной по структуре или с изменением структуры выборки. Для этого сначала также необходимо сформировать обычный запрос и оценить результаты его выполнения. Далее следует вернуться в режим конструктора запроса. В опции Тип запроса панели инструментов Конструктор выбирается опция Тип запроса: добавление. В появившемся окне Добавление вводится имя таблицы и место расположения (например, в текущей базе данных). Указывается имя создаваемой таблицы и нажимается кнопка ОК.

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

· Запрос-удаление. С помощью запросов можно удалить часть или все записи из таблицы. Снова формируется обычный запрос и оцениваются результаты его выполнения. Далее следует вернуться в режим конструктора запроса. В опции Тип запроса панели инструментов Конструктор выбирается опция Тип запроса: удаление, после чего в бланке запроса появляется новая строка с именем Удаление, куда можно вводить дополнительные условия на выборку удаляемых записей. Последний шаг - нажатие кнопки ОК.

· Запрос-обновление. С помощью запросов можно обновлять в единой операции некоторые или все значения выбранных полей таблицы. Для этого сначала необходимо сформировать обычный запрос, в результате которого отбираются записи, подлежащие обновлению. После оценки результатов предыдущего действия следует вернуться в режим конструктора запроса.

Далее в опции Тип запроса панели инструментов Конструктор выбирается опция Тип запроса: обновление. В бланке запроса появляется новая строка с именем Обновление. В ней задаются новые значения полей таблицы, в том числе и вычисляемые выражения, например, увеличение оклада (хранится в поле с именем Оклад) на 20% может быть задано в виде выражение [Оклад]*1.2. Далее запрос запускается на выполнение кнопкой . СУБД указывает число модифицируемых записей и просит подтвердить изменения кнопкой ОК. Пользователь на этом этапе еще может отказаться от модификации значений в таблице.

Рассмотренные запросы могут быть обращены как к одной таблице, так и нескольким связанными между собой. В последнем случае формирование бланка запроса предполагает предварительный вызов требуемых таблиц на бланк запроса (см. рисунок 6.1).

Выполнение лабораторной работы

Для таблицы СЛУЖАЩИЕ БД Предприятие сформировать, проверить корректность и сохранить запросы, выбираемые в соответствии с вариантом из таблицы 6.1:

Таблица 6.1

№ варианта Запросы № варианта Запросы
  1, 2, 3, 4, 5, 6, 7, 8   1, 2, 3, 5, 6, 7, 8, 9
  1, 2, 3, 4, 5, 6, 9, 10   1, 2, 3, 4, 6, 7, 9, 10
  1, 2, 3, 4, 5, 6, 7, 9   1, 2, 3, 5, 6, 7, 9, 10
  1, 2, 3, 4, 5, 6, 7, 11   1, 2, 3, 4, 6, 7, 8, 11
  1, 2, 3, 4, 5, 6, 7, 10   1, 2, 3, 5, 6, 7, 8, 10
  1, 2, 3, 4, 5, 6, 8, 11   1, 2, 3, 4, 6, 8, 10, 11
  1, 2, 3, 4, 5, 6, 8, 9   1, 2, 3, 5, 6, 8, 9, 10
  1, 2, 3, 4, 5, 6, 8, 10   1, 2, 3, 5, 6, 7, 8, 10
  1, 2, 3, 4, 5, 6, 9, 11   1, 2, 3, 5, 6, 9, 10, 11
  1, 2, 3, 4, 5, 6, 10, 11   1, 2, 3, 4, 5, 7, 10, 11

1. Отображающий в выборке поля:

- ФИО;

- дату рождения;

- отдел;

- оклад.

2. Отображающий в выборке все поля таблицы для работников одного отдела. Сделать данный запрос параметризованным.

3. Отображающий для семейных сотрудников в выборке поля:

- ФИО (фамилии которых начинаются на буквы от "Г" до "Ш");

- отдел;

- количество детей.

4. Отображающий для холостых сотрудников в выборке поля:

- ФИО;

- должность;

- оклад (>1000).

5. Рассчитывающий для каждого сотрудника налог в виде выражения

налог = (0.99*зарплата - ((количество_детей * 300) + 400))) * 0,12

При этом в выборке выводятся:

- ФИО;

- отдел;

- зарплата;

- налог.

6. Определяющий количество служащих по каждому уровню образования.

7. Вычисляющий сумму окладов для каждого отдела.

8. Вычисляющий средний оклад по всей фирме.

9. Выбирающий из таблицы СЛУЖАЩИЕ всех женщин и сохранить выборку в виде новой таблицы ЖЕНЩИНЫ.

10. Удаляющий из таблицы СЛУЖАЩИЕ служащих одного определенного отдела;

11. Увеличивающий всем женщинам, имеющим детей, в таблице СЛУЖАЩИЕ оклад в 1.5 раза.

12. Работу запросов продемонстрировать преподавателю.



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: