Добавлен: 19.10.2018
Просмотров: 7967
Скачиваний: 3
51
Рис. 2.12 Выполнение запросов на связанных таблицах (вариант 2)
Совет:
1. При задании запроса удаляйте из него все таблицы, поля которых не
участвуют в формировании запроса.
2. При проектировании структуры базы данных тщательно продумывайте
имена, которые вы даете полям разных таблиц.
3. Проверяйте связи, которые система задает автоматически.
Существуют понятия внутреннего, левого и правого соединения. В QBE
Access это задается не в бланке запроса, а при задании схемы или при
определении параметров связи в окне запроса. При формулировании запроса
надо уточнить, какой тип объединения
4
был задан, и, при необходимости,
изменить тип соединения, на тот, который необходим именно для этого запроса,
так как тип объединения будет влиять на правильность ответа. Так, например,
если необходимо выдать список всех сотрудников, а для тех, кто имеет детей –
информацию о детях, то для соединения таблиц “СОТРУДНИК” и “ДЕТИ” надо
выбрать вторую альтернативу в окне “Параметры объединения”.
4
В реляционной теории различают операции “соединения” и “объединения”. То, о чем идет сейчас речь,
является реляционной операцией соединения. Но в системе Access обе эти операции называются
“объединением”, и когда рассматриваем, как это сделать в Access, то приходится переходить на терминологию
этой системы.
52
Изменить тип объединения в запросе можно, выделив нужную связь и
нажав на правую кнопку мыши. В появившемся контекстном меню (рис. 2.13)
выбрать «Параметры
объединения».
Либо выбрать позицию меню
«Вид/Параметры объединения».
Рис. 2.13. Выбор типа объединения таблиц
Возможно создание запросов, в котором таблица соединяется сама с
собой (так называемое «Самообъединение»). Например, для класса объектов
«СОТРУДНИК» имеется связь «Быть руководителем». В рассматриваемом нами
примере для отражения этой связи в таблицу «СОТРУДНИК» введено поле
«Руководитель», которое содержит код сотрудника, являющего руководителем
данного сотрудника.
53
Рис. 2.14. Пример использования самообъединения таблиц в запросе
Для того чтобы объединить две копии одной и той же таблицы в запросе
надо в режиме конструктора запроса дважды добавить эту таблицу в запрос.
Далее надо осуществить соединение таблицы с ее копией обычным путем
(установить курсор на поле связи в первом экземпляре таблицы и, не отпуская
кнопки мыши, переместить появившийся значок на соответствующее поле в
списке полей другой таблицы). На рис. 2.14 изображен запрос «Для каждого из
руководителей выдать список его подчиненных». Для того чтобы в
результатной таблице было понятно, что означает поле «ФИО» в каждом
столбце, можно переименовать эти столбцы, назвав первый «Руководитель»,
второй – «Подчиненный». Для этого можно щелкнуть правой клавишей мыши
на соответствующем поле, в высветившемся меню выбрать позицию
«Свойства» и в появившемся окне «Свойства поля» в строке “Подпись”
ввести требуемый заголовок столбца (рис. 2.15).
54
Рис. 2.15. Изменение подписи поля
Вид результатной таблицы после произведенных действий представлен на
(рис. 2.16).
Рис. 2.16. Вид результатной таблицы (результат запроса с
самообъединением таблицы)
55
2.2.4 Запросы с подгруппировкой
Термина «обобщенный» или «агрегирующий» оператор в Access нет. Есть
просто понятие «встроенные функции Microsoft Access», а среди них –
«статистические функции» и «статистические функции по подмножеству».
Статистические функции – это: Sum (сумма), Count (количество записей,
возвращаемых запросом), Avg (среднее), Var (дисперсия) и др., используемые
для расчета итоговых значений. Статистическая функция, с помощью которой в
запросе обрабатываются значения поля, может быть выбрана в ячейке строки
"Групповая операция" в бланке запроса. Первоначально эта строка в бланке
запроса отсутствует. Чтобы она появилась, надо выбрать позицию “Групповые
операции” меню “Вид”, или нажать кнопку со знаком “Σ” на панели
инструментов.
Рис. 2. 17. Использование групповых операций в запросах.
Выбор агрегирующей функции
Первым полем, выводимым в ответ, должно быть поле, по которому
производится группировка, а затем – поля, над которыми производятся
вычисления. Все групповые операции, кроме Count, могут выполняться только
над числовыми полями.