Лекция 7
Запросы.
Определение запроса.
Запрос - это обращение к базе данных, содержащее определенную команду и набор параметров. Запросы используются для просмотра, изменения и анализа данных различными способами. Запросы также можно использовать в качестве источников записей для форм и отчетов. В Microsoft Access есть несколько типов запросов.
Виды запросов и их функции.
Запрос на выборку является наиболее часто используемым типом запроса. Запросы этого типа возвращают данные из одной или нескольких таблиц и отображают их в виде таблицы. Запросы на выборку можно также использовать для группировки записей и вычисления сумм, средних значений, подсчета записей и нахождения других типов итоговых значений.
Запрос с переменными (Запрос с параметрами) – это запрос, содержащий в себе неопределенные параметры (переменные) и который при выполнении требует ввода значений неопределенных параметров.
Запрос с переменными при выполнении отображает в собственном диалоговом окне приглашение ввести данные, например условие для возвращения записей или значение, которое требуется вставить в поле. Можно разработать запрос, выводящий приглашение на ввод нескольких единиц данных, например двух дат. Затем Microsoft Access может вернуть все записи, приходящиеся на интервал времени между этими датами.
Запросы с переменными также удобно использовать в качестве основы для форм и отчетов. Например, на основе запроса с параметрами можно создать месячный отчет о доходах. При печати данного отчета Microsoft Access выводит на экран приглашение ввести месяц, доходы за который должны быть приведены в отчете. После ввода месяца Microsoft Access выполняет печать соответствующего отчета.
Перекрестные запросы используют для расчетов и представления данных в структуре, облегчающей их анализ. Перекрестный запрос подсчитывает сумму, среднее, число значений или выполняет другие статистические расчеты, после чего результаты группируются в виде таблицы по двум наборам данных, один из которых определяет заголовки столбцов, а другой заголовки строк.
Запросы на изменение называют запрос, который за одну операцию изменяет или перемещает несколько записей. Существует четыре типа запросов на изменение.
На удаление записи. Запрос на удаление удаляет группу записей из одной или нескольких таблиц. Например, запрос на удаление позволяет удалить записи о товарах, поставки которых прекращены или на которые нет заказов. С помощью запроса на удаление можно удалять только всю запись, а не отдельные поля внутри нее.
На обновление записи. Запрос на обновление вносит общие изменения в группу записей одной или нескольких таблиц. Например, на 10 процентов поднимаются цены на все молочные продукты или на 5 процентов увеличивается зарплата сотрудников определенной категории. Запрос на обновление записей позволяет изменять данные в существующих таблицах.
На добавление записей. Запрос на добавление добавляет группу записей из одной или нескольких таблиц в конец одной или нескольких таблиц. Например, появилось несколько новых клиентов, а также база данных, содержащая сведения о них. Чтобы не вводить все данные вручную, их можно добавить в таблицу «Клиенты».
На создание таблицы. Запрос на создание таблицы создает новую таблицу на основе всех или части данных из одной или нескольких таблиц. Запрос на создание таблицы полезен при создании таблицы для экспорта в другие базы данных Microsoft Access или при создания архивной таблицы, содержащей старые записи.
Запросы SQL
Запрос SQL — это запрос, создаваемый при помощи инструкций SQL. Язык SQL (Structured Query Language) используется при создании запросов, а также для обновления и управления реляционными базами данных, такими как базы данных Microsoft Access. Когда пользователь создает запрос в режиме конструктора запроса, Microsoft Access автоматически создает эквивалентную инструкцию SQL. Фактически, для большинства свойств запроса, доступных в окне свойств в режиме конструктора, имеются эквивалентные предложения или параметры языка SQL, доступные в режиме SQL. При необходимости пользователь имеет возможность просматривать и редактировать инструкции SQL в режиме SQL. После внесения изменений в запрос в режиме SQL его вид в режиме конструктора может измениться.
Виды запросов создаваемые с помощью мастера.
Кроме конструктора запросов в MS Access есть функция - мастер создания запросов, который автоматически создает запрос определенного типа на основе параметров заданных пользователем.
Мастер может создать запросы следующих типов:
Простой запрос. Запрос на выборку из заданных полей. При создании такого запроса пользователь должен выбрать поля одной или нескольких таблиц.
Перекрестный запрос. Запросы такого типа обычно используются в отчетах, например квартальный отчет по прибыли или отчет продаж по отделам или филиалом. Примером такого запроса является таблица средних оценок по факультетам. После обработки такого запроса СУБД выдаст таблицу, в левом столбце которой будет отображаться имя факультета, а имена других столбцом – название предмета. В самой таблицы будут отображены средние оценки.
Повторяющиеся записи. С помощью мастера поиска повторяющихся записей можно создать запрос на выборку, чтобы определить, содержит ли таблица повторяющиеся записи. Например, по совпадающим значениям в поле «Адрес» можно найти повторяющиеся записи, относящиеся к одному и тому же поставщику, а повторяющиеся значения в поле «Город» позволяют отобрать всех поставщиков, находящихся в одном городе.
Поиск записей, не имеющих подчиненных. С помощью мастера поиска записей, не имеющих подчиненных, можно создать запрос на выборку для поиска записей, не имеющих соответствующих им записей в другой таблице. Например, можно найти клиентов, не имеющих заказов.
Связи между таблицами.
В запросе могут содержаться данные из нескольких таблиц, тогда эти таблицы должны быть связаны между собой. Связи между таблицами можно посмотреть в схеме данных. При проектировании базы данных вначале создается её структура к которой определяются таблицы и их связи. При создании структуры БД придерживаются следующего принципа – в таблицы не должно быть дублирования данных, если только это специально не требуется.
Предположим нам надо создать базу данных содержащую информацию о сданных студентами экзаменах. Если все данные записать в одну таблицу, у нас получиться следующих набор полей: «Фамилия студента», «Название предмета», «Оценка», но мы будем иметь дублирование в поле «Фамилия студента», поскольку студент сдает несколько предметов. Для того чтобы избежать дублирование нужно создать три таблицы:
Таблица студенты. Основные поля: «код студента», «фамилия студента».
Таблица предметы. Основные поля: «код предмета», «название предмета».
Таблица оценки. Основные поля: «код студента», «код предмета», «оценка»
Связь создается между одной или несколькими парами полей, как минимум одно поле должно быть ключевое.
В нашем примере таблицы будут связаны следующим образом:
Есть три типа логических связей:
Один-к-одному. Такая связь создается между двумя ключевыми полями. Если две таблицы имеют связь один-к-одному, то записи первой таблицы будет соответствовать одна запись второй таблицы. На практике используется нечасто, так как две таблицы связанные между собой такой связью можно объединить в одну без дублирования данных. Например, можно создать таблицу «средний балл» с полями: «код предмета», «средний балл», она будет иметь связь один-к-одному с таблицей «Предметы».
Один-ко-многим Такая связь создается между двумя полями, одно из которых ключевое. При такой связи одной записи таблицы, содержащей ключевое поле, может соответствовать несколько записей другой таблицы, не содержащей ключевое поле. В качестве примера рассмотрим базу данных Biblio. Таблицы Publishers (издатели) и Titles (заголовки) имеют связь один-ко-многим. Связь создана между ключевым полем таблицы Publishers – PubID и полем таблицы Titles PubID, которое ключевым полем не является. Таким образом, одной записи таблицы Publishers может соответствовать несколько записей таблицы Titles, что вполне логично, так как у издателя может быть много изданных книг.
Также связь один-ко-многим может быть создана между полями двух таблиц, одно из которых ключевое, а другое является частью составного ключа. В нашем примере со студентами и оценками, в таблице «Оценки» два ключевых поля – т.е. используется составной ключ.
Многие-ко-многим Такая связь создается между двумя таблицами, каждая из которых имеет несколько ключевых полей, или составной ключ. Но, как правило, напрямую такую связь не используют, а создают специальную таблицу связей. В качестве примера можно взять базу данных biblio. Таблица Title Autor выступает именно в роли связующей таблицы между таблицей Titles и таблицей Authors. Это как раз тот случай где необходимо использовать связь один-ко-многим, так как у книги может быть несколько авторов, а у автора может быть несколько книг.
Отличие запроса от фильтра. Запрос это обращение к БД, а фильтр это определенный параметр, как правило, содержащий определенные критерии. С помощью фильтра нельзя вывести данные, изменить или удалить их. Фильтр только содержит некоторый критерий, на основе которого определяется, какие данные выводятся, изменяются или удаляются. Любой запрос содержит в себе определенный набор фильтров.
Параметры запросов.
Построитель выражений Чтобы открыть построитель выражений в конструкторе запросов, в строке «поле» надо выбрать ячейку и в контекстном меню выбрать пункт «построить». Можно воспользоваться кнопкой на панели инструментов. Построитель выражений можно использовать для строки «условие отбора», а также при создании форм и отчетов. С помощью построителя выражений можно выбирать источник данных для запроса, создавать выражения для вычисления данных.
Групповые операции используются в запросах для группировки данных по определенному критерию. Для того, чтобы использовать групповые операции в конструкторе запросов нужно в любой ячейке вызвать контекстное меню и выбрать пункт «групповые операции». После этого появится соответствующая строка. В этой строке надо выбрать критерий группировки, например: группировка одинаковых значений, среднее значение, максимум или минимум, количество значений.
В качестве примера рассмотрим запрос оценок студентов. Этот запрос будет брать данные из таблиц «студенты» и «оценки». В запросе будет три поля «код студента», «фамилия студента» и «оценка».
Чтобы узнать среднюю оценку студента по всем предметам, в строке групповые операции выбираем пункт Avg. А чтобы показать максимальную или минимальную оценку выбираем пункт max или min соответственно.
Основные функции используемые при работе с БД.
Язык SQL.
Запрос SQL — это запрос, создаваемый при помощи инструкций SQL. Язык SQL (Structured Query Language) используется при создании запросов, а также для обновления и управления реляционными базами данных, такими как базы данных Microsoft Access.
Когда пользователь создает запрос в режиме конструктора запроса, Microsoft Access автоматически создает эквивалентную инструкцию SQL. Фактически, для большинства свойств запроса, доступных в окне свойств в режиме конструктора, имеются эквивалентные предложения или параметры языка SQL, доступные в режиме SQL. При необходимости пользователь имеет возможность просматривать и редактировать инструкции SQL в режиме SQL. После внесения изменений в запрос в режиме SQL его вид в режиме конструктора может измениться.
Инструкция (строка) SQL - выражение, определяющее команду SQL, например SELECT, UPDATE или DELETE, и включающее предложения, например WHERE или ORDER BY. Инструкции/строки SQL обычно используются в запросах и в статистических функциях.
Некоторые запросы, которые называют запросами SQL, невозможно создать в бланке запроса. Для запросов к серверу, управляющих запросов и запросов на объединение необходимо создавать инструкции SQL непосредственно в окне запроса в режиме SQL. Для подчиненного запроса пользователь должен ввести инструкцию SQL в строку Поле или Условие отбора в бланке запроса.
Основные операторы языка SQL.
Data Definition Language (DDL).
Эта составляющая языка содержит операторы, позволяющие создавать, модифицировать и уничтожать базы данных и объекты внутри них (таблицы, представления) (см. таблицу 1).