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

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




Скачати 121.98 Kb.
НазваЗапрос на выборку
Дата11.09.2012
Розмір121.98 Kb.
ТипДокументи

Глава 4.5 Использование запросов


Существует несколько типов запросов: на выборку, на обновле­ние, на добавление, на удаление, перекрестный и создание таблицы.



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


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

Чтобы создать новый запрос, необходимо нажать кнопку За­просы в окне БД и после этого выбрать режим соз­дания запроса: с использованием конструктора или мастера.

Создание запроса в режиме конструктора. После выбора ре­жима конструктора будет отображено диалоговое окно ^ Добавле­ние таблицы для выбора таблицы (или таблиц), которая будет служить источником данных при выполнении этого запроса.

Поле - указывается название поля, содержимое которого бу­дет добавлено в результаты запроса. Чтобы добавить поле в за­прос, можно перетащить его в строку Поле из макета таблицы, расположенного в верхней части окна, или выбрать требуемое поле в списке, который можно раскрыть в строке Поле. Чтобы добавить в запрос все поля из таблицы, следует дважды щелкнуть в таблице на строке с символом "*".

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

Сортировка - указывается направление сортировки для дан­ного поля - по возрастанию или по убыванию.

Вывод на экран - задается режим, при котором на экране будет отображаться содержимое выбранного поля. На практи­ке возможны случаи, когда определенное поле участвует в за­просе, например, для выполнения относительно его какого-либо условия, однако в результатах запроса это поле может и не отображаться.

^ Условие отбора, или - указываются одно или несколько ус­ловий, в соответствии с которыми записи будут добавляться в выборку.

Например, необходимо отобразить только оценки "4" и "5", полученные студентами (без указания фамилий), и дату сдачи. При создании такого запроса источником данных будет служить таблица Успеваемость (см. рис. 4.58). В запросе будут использо­ваться поля Оценка и ДатаСдачи, названия которых необходимо выбрать в строке Поле. Название таблицы в поле Имя таблицы будет установлено автоматически. Для поля ДатаСдачи можно установить направление сортировки по возрастанию. Оба ука­занных поля необходимо выводить на экран, поэтому для каждо­го из них нужно установить флажок Вывод на экран. В строке Условие отбора для поля Оценка нужно указать следующее ус­ловие: 4 OR 5 (см. рис. 4.59) или указать первое значение (4) в поле Условие отбора, а второе (5) — в поле Или.

Созданный таким образом запрос необходимо выполнить. Для этого нужно нажать кнопку Запуск или выполнить команду ^ Запрос \ Запуск.

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

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

Для решения этой задачи необходимо открыть запрос ОценкаДата в режиме конструктора и добавить в макет запроса еще две таблицы, которые содержат требуемую информацию: Сту­денты и Предметы. Для поля Фамилия из таблицы Студенты следу­ет указать направление сортировки по возрастанию, а для поля Название из таблицы Предметы - условие "Физика". При этом сортировку для поля ДатаСдачи можно отменить, выбрав в поле Сортировка значение (отсутствует).



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

С другой стороны, при создании вычисляемого поля на основе содержимого текстовых полей, как правило, используется опера­ция объединения текстовых значений, которая называется конка­тенацией.



Очевидно, что рассмотренные операторы предоставляют дос­таточно узкий спектр возможностей по созданию выражений. Чтобы создать сложное выражение, используют мощное средст­во, которое носит название Построитель выражений. Эта про­грамма позволяет построить выражение любой сложности с ис­пользованием самых разнообразных функций. (Самостоятельно)


Групповые операции. При обработке данных в таблицах зачас­тую бывает необходимо учитывать в запросах не отдельные запи­си, а итоги, которые вычисляются или формируются определен­ным образом для различных групп записей в таблице. Например, необходимо выполнить запрос, в котором для каждого студента было бы подсчитано количество полученных им оценок, а также вычислен средний балл. И затем на основании среднего балла определена стипендия, например, из расчета 10 грн. за каждый балл. Другими словами, для отличника (средний балл = 5) размер стипендии должен составить 50 грн.

Чтобы выполнить подобные вычисления, необходимо создать новый запрос в режиме конструктора, добавить в него с помощью кнопки Отобразить таблицу таблицы Студенты и Успевае­мость, и затем воспользоваться кнопкой Групповые операции.

После этого среди параметров запроса появится строка ^ Групповые операции. Чтобы вычислить для каждого студента его средний балл, необходимо вначале добавить в запрос поле Фами­лия таблицы Студенты. При этом в строке Групповые операции по умолчанию устанавливается значение Группировка.

Итак, для каждой фамилии студента во втором столбце необ­ходимо расположить общее количество оценок, полученных каж­дым студентом, в третьем - средний балл, и в четвертом - размер начисленной стипендии. Для этого во второй и третий столбцы запроса следует добавить поле Оценки таблицы Успеваемость, так как на основании именно этого поля будет определяться об­щее число оценок, а также вычисляться средний балл каждого студента.

При выполнении групповых операций можно использовать так называемые итоговые функции (см. табл. 4.25), которые следует выбирать из списка в добавленном поле Групповые операции.



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

Чтобы вычислить размер стипендии, необходимо создать вы­ражение с помощью построителя выражений. Для этого вначале следует выбрать в строке Групповые операции четвертого столбца запроса с помощью разворачивающегося списка пункт Выраже­ние. Затем нужно, находясь в этом поле, нажать кнопку Постро­ить и указать в построителе выражений формулу для вычис­ления размера стипендии. В данной формуле будет использовать­ся поле групповой операции с функцией Avg, полученное ранее. Следует отметить, что подобным полям в запросах, как и вычис­ляемым полям. Access автоматически присваивает имена. В част­ности поле, содержащее количество оценок, было названо Count-Оценка, а поле со средним баллом было названо Avg-Оценка. Следовательно, в окне Построитель выражении необходимо в формуле для стипендии использовать поле Avg-Оценка сохра­ненного запроса СреднийБалл. Т. е. нужно вставить в формулу поле Avg-Оценка из папки СреднийБалл и умножить это значе­ние на 10 для определения размера стипендии. Од­нако необходимо иметь в виду, что если бы рассматриваемый запрос не был сохранен, то в Построителе выражений не появи­лись бы поля Count-Оценка и Avg-Оценка.

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

Перекрестные запросы. В Access имеется возможность соз­дания запросов, в которых используются групповые операции в виде электронных таблиц, т. е. в качестве названий строк и столбцов такой "таблицы" используются те или иные поля таб­лиц, а в ее "ячейках" будут отображаться вычисляемые значе­ния, которые соответствуют значениям, указанным в названии строки и столбца. Например, в качестве примера подобной электронной таблицы можно рассмотреть набор оценок, кото­рые получил каждый студент по всем предметам. Другими сло­вами, заголовками строк такой таблицы будут фамилии студен­тов, заголовками столбцов - названия предметов, а на пересече­нии строк и столбцов будет отображаться оценка того или иного студента по данному предмету, аналогично расположению дан­ных в рабочих листах Excel. При этом необходимо отметить, что вычисляемые значения не могут быть отредактированы, поэтому перекрестный запрос нет смысла использовать с целью изменения данных. Однако перекрестные запросы могут ока­заться весьма полезными при создании отчетов.

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

Студенты, Успеваемость и Предметы. После этого необходимо выполнить команду ^ Запрос \ Перекрестный, в результате чего в макете запроса среди параметров появится строка Перекрестная таблица, в которой для полей запроса можно с помощью разво­рачивающегося списка выбрать одно из следующих значений:

^ Заголовки строк - выбирается для поля запроса, значения ко­торого нужно использовать в качестве заголовков строк. В каче­стве заголовков строк необходимо определить хотя бы одно поле, при этом в строке Групповые операции необходимо выбрать зна­чение Группировка, одну из итоговых функций или Выражение;

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

Значение - выбирается для поля запроса, в котором вычисля­ется итоговое значение, отображаемое в "ячейках" перекрестного запроса. Такое поле должно быть единственным, при этом в строке Групповые операции для него необходимо выбрать одну из итоговых функций или задать выражение, в котором используют­ся итоговые функции;

(не отображается) - выбирается для того поля, значения ко­торого не должны отображаться в перекрестном запросе.

В первом столбце запроса нужно выбрать поле Фамилия таб­лицы Студенты, при этом следует задать для него значение Груп­пировка в поле Групповая операция, а также Заголовки строк в поле Перекрестная таблица. Также можно выбрать направление сортировки по возрастанию.

Для второго столбца запроса необходимо выбрать поле На­звание таблицы Предметы и установить для него значение Груп­пировка в поле Групповая операция и Заголовки столбцов в поле Перекрестная таблица.

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

Созданный запрос можно сохранить под именем ОценкиПо-Предметам.

В результате выполнения перекрестного запроса ОценкиПо-Предметам будет получена электронная таблица, содержащая оценки студентов по всем предметам (см. рис. 4.75). Данный за­прос может быть использован, например, в отчете, который дол­жен отображать итоги прошедшей сессии.

^

Типы запросов на изменение


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

Создание таблицы. В том случае, когда при многократном вы­полнении запроса на выборку происходит отбор одних и тех же данных, то их целесообразно оформить в виде новой таблицы с помощью запроса на создание. Такой запрос будет особенно эф­фективным, если процесс получения данных достаточно трудо­емок, т. е. когда приходится выполнять большое количество вы­числений или работать с большими объемами информации.

Чтобы создать с помощью запроса новую таблицу, необходи­мо с помощью конструктора построить запрос на выборку, после чего выполнить команду Запрос \ Создание таблицы.

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

В качестве примера можно рассмотреть таблицу Студенты в БД Образование. Каждый студент в этой БД может находиться в одном из трех состояний: учится, в академическом отпуске, от­числен. Чтобы иметь возможность изменять состояние студента, т. е. отчислять, восстанавливать, отправлять в академический отпуск или "возвращать" из отпуска, можно в таблицу Студенты добавить поле Состояние. Если студент учится, то это поле должно быть пустым. Если же студент отчислен, то необходимо в поле Состояние указать признак "о", а если в академическом от­пуске, то признак "а".

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

Размер поля: 1;

^ Условие на значение: " Or "a" Or "о";

Пустые строки: Да.

В поле Состояние могут находиться как символы "а" или "о", так и пустая строка, т. е. " ". Поэтому в свойстве ^ Условие на зна­чение необходимо указать, что в данное поле может быть введено только одно из этих значений (или не введено ничего). Кроме этого, в свойстве Пустые строки следует указать, что в поле Со­стояние могут храниться пустые строки.

Далее необходимо создать но­вый запрос в режиме конструктора и добавить в макет таблицу Студенты. Затем поочередно добавить в запрос все поля этой таблицы, причем для поля Состояние указать параметр Условие отбора: "а".

Заключительным этапом в создании запроса будет изменение его типа с ^ Выборка на Обнов­ление кнопкой Тип запроса (см. рис. 4.76), после чего в макете появится новый параметр - Обновление. Для поля Состояние не­обходимо указать Обновление: " " (пустая строка), чтобы для всех студентов-академистов был удален признак "а". Полученный таким образом запрос (см. рис. 4.79) можно сохранить под име­нем Академисты.

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

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

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

После этого следует выбрать тип запроса Добавление, в ре­зультате чего будет отображено диалоговое окно Добавление в котором необходимо в качестве "приемника" данных выбрать таблицу СтудентыОтчисл (см. рис. 4.82).

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

При создании запроса на удаление следует иметь в виду, что с удаляемыми записями могут быть связаны данные из другой таб­лицы. Например, студенты Жукова или Морозов имеют несколь­ко оценок, т. е. существует непосредственная связь между дан­ными в таблицах Студенты и Успеваемость. Другими словами, невозможно просто удалить записи для этих студентов из табли­цы Студенты, так как в этом случае для нескольких записей из таблицы Успеваемость в поле КодСтудента будет содержаться ссылка на несуществующие записи в таблице Студенты.

Для предотвращения подобной ситуации необходимо прове­рить, какой вид связи имеется между полями КодСтудента таб­лиц Студенты и Успеваемость, и убедиться, что для этой связи в диалоговом окне Изменение связей установлен ре­жим каскадное удаление связанных записей.

Создание запроса выполнятся так же, как и в предыдущих случаях. Для простоты можно в данном случае воспользоваться готовым запросом ДобавлениеОтчисл, сохранив его под новым именем УдалениеОтчисл. При этом необходимо установить тип запроса Удаление с помощью кнопки Тип запроса.

Теперь при каждом запуске данного запроса из таблицы Сту­денты будут удаляться все отчисленные студенты. Кроме того, будут также удаляться все связанные с ними записи из таблицы Успеваемость. Другими словами, из БД будет удаляться и сту­дент, и его оценки.





Схожі:

Запрос на выборку iconСоздание запросов на выборку
Запросы позволяют выполнять выборку и/или обновление данных в таблицах, в зависимости от наложенных условий
Запрос на выборку iconБиблиографическая справка ответ на разовый библиографический запрос. В зависимости от формы, справки делятся на устные и письменные

Додайте кнопку на своєму сайті:
Документи


База даних захищена авторським правом ©zavantag.com 2000-2013
При копіюванні матеріалу обов'язкове зазначення активного посилання відкритою для індексації.
звернутися до адміністрації
Документи