
Лекция 22. Управление данными в Microsoft Access (часть 8).
План лекции
-
Записи без подчиненых.
-
Построение условий для выбора записей.
-
Операторы выбора записей.
-
Многотабличные запросы.
-
Внутреннее и внешнее соединение.
-
Использование в запросах вычисляемых полей.
-
Окно построителя выражений.
Записи без подчиненых
Пример. Найти клиентов, которые не сделали ни одного заказа.
-
На вкладке Создание в группе Другие щелкните Мастер запросов.В диалоговом окне Новый запрос выберите в списке строку Записи без подчиненных и нажмите кнопку ОК.
-
Выбираем родительскую таблицу Клиенты, те мы хотим знать: заказы есть у всех клиентов?
-
Выбираем таблицу Заказы с подчиненями записями.
-
Выбираем поля связи таблиц .
-
Выбираем поля для отображения Фамилия, Имя , Рабочий телефон.
Результат:
Создание запроса в режиме конструктора
Преимуществом мастера запросов является возможность быстрого получения результатов при минимуме знаний о механизме их получения. Но мастер запросов не позволяет указать условие выборки, критерий упорядочивания и более сложные параметры выборки.
Рассмотрим конструктор запросов, который позволяет создавать сложные запросы в интерактивном режиме.
Предположим, что необходимо получить сведения о поставщиках. Для создания такого запроса выполните следующие действия:
-
На вкладке Создание найдите группу Другие:
-
Выберите Конструктор запросов. Откроется окно диалога «Добавление таблицы», в котором выберите таблицу “Поставщики” и нажмите кнопку Добавить. Закройте окно диалога.

На экране открывается окно конструктора запросов (рис.), схема данных которого содержит всего одну таблицу (сверху), а бланк запроса (снизу) пуст.
Для выбора полей, которые должны присутствовать в результирующей таблице, вам необходимо отобразить их в бланке запроса. Для этого нужно выбрать поле таблицы на схеме данных и дважды нажать кнопку мыши. Выбранное поле будет вставлено в следующий доступный столбец в строке Поле бланка запроса.
В строке Имя таблицы сразу же появится имя таблицы, а позиция Вывод на экран будет отмечена.
Порядок полей в бланке запроса определяет порядок появления их в результирующей таблице.
Чтобы отсортировать данные в отдельном поле, перейдите на строку Сортировка требуемого поля и из раскрывающегося списка выберите значение По возрастанию или По убыванию. Если сортировка по полю не нужна, то выберите значение Отсутствует.
Для
запуска простого запроса нажмите кнопку
Конструктор/Результаты/Выполнить
на панели инструментов.
Результат выполнения запроса появится в режиме таблицы.
Созданный запрос можно использовать в дальнейшем. Для этого его нужно сохранить командой Файл/Сохранить как, которая откроет окно диалога ввода имени запроса.
Построение условий для выбора записей
На практике в большинстве случаев требуется получить не все записи исходной таблицы, а лишь ту часть, которая удовлетворяет определенным критериям. Простейший критерий предполагает точное совпадение значений поля условию выбора. Значение поля, которое используется в качестве критерия выборки, вводится в строке Условия отбора окна «Конструктор запросов».
Для построения более сложных условий выбора записей используются следующие операторы:
-
Оператор Not – для задания точного несовпадения одного из полей. С этой целью введем в поле Фамилия конструктора запросов условие Not “Андреева”. Выводятся все записи не содержащие фамилию Андреева.
-
Оператор Like - условие неточного совпадения. Данный оператор позволяет найти требуемые записи, зная лишь приблизительное написание величины. Этот оператор используется совместно с подстановочными символами: ? , * , [ , # . Например, чтобы получить данные поставщика, фамилия которого точно неизвестна (Хромов , а может быть Храмов), то нужно ввести условие отбора Like ”Хр?мов”.(посмотрите справку «Справочные сведения о подстановочных знаках»)
-
Операторы Or или And позволяют формировать в одной строке сложное условие выборки. Например, чтобы получить значения поставщиков, имеющих фамилии Орлов или Соколов , нужно ввести сложное условие выборки: ”Орлов” Or ”Соколова ”.
-
Операторы диапазона. Для задания диапазона значений в окне «Конструктор запросов» используются операторы > (больше), >= (не менее), < (меньше), <= (не более) и Between (между), которые можно использовать с текстовыми и цифровыми полями, а также полями дат.
-
Очень часто возникают ситуации, когда необходимо использовать более сложный критерий выборки, в котором задаются условия для нескольких полей таблицы или же несколько условий для одного поля.
Если запись выбирается только в случае выполнения всех условий, то условие такого выбора называется логическим И, а запрос И-запросом. Для задания И–выражения нужно просто задать условие в строке Условие отбора для каждого из полей, образующих критерий.
Например, необходимо извлечь информацию о работе сотрудника Сергиенко Марии (идентификатор 4) в период от 20.02.2006 до 20.04.2006.


Если же запись выбирается при выполнении хотя бы одного из всех условий, то условие такого поиска называется логическим ИЛИ, а запрос – ИЛИ–запросом. При задании ИЛИ–выражения каждое из условий выбора, образующих критерий, должно располагаться на отдельной строке бланка запроса: первое условие в строке Условие отбора, а второе – в строке ИЛИ.

Многотабличные запросы
При выборе данных из таблиц наиболее часто используются многотабличные запросы, поскольку информация в реляционных БД содержится не в одной отдельной таблице, а в совокупности связанных таблиц.
Для формирования многотабличного запроса необходимо войти в режим Конструктора запросов.
В окне Добавление таблицы добавить в окно «Конструктор запросов» все таблицы, участвующие в выборке, и определить условия их объединения.
В окне диалога Добавление таблицы выберите нужную таблицу. Образ таблицы появится в схеме данных запроса. Добавьте в запрос другие таблицы. Если в БД установлены отношения связи между таблицами, участвующими в запросе, то эта связь будет отображаться в виде линии, соединяющей таблицы. Если же между таблицами не существует связи, то вы можете установить требуемую связь, используя механизм “перенести-и-оставить”. Для этого выберите поле в одной из таблиц, нажмите кнопку мыши и перенесите выбранное поле на связываемое поле в другой таблице.
Логические условия И / ИЛИ в многотабличных запросах работают точно так же, как в однотабличных.
В качестве примера получим информацию о заказах, сделанных в январе - апреле 2006 г. года клиентами, проживающими в городе Москва. Эти данные содержатся в таблицах “Клиенты” и “Заказы”. Для решения этой задачи выполним следующие действия:
-
Откроем новое окно «Конструктор запросов» и добавим в него таблицы “Клиенты” и “Заказы”. Так как при создании БД между этими таблицами уже было определено отношение связи, поэтому при создании запроса не нужно устанавливать между ними связь. Схема данных запроса будет содержать добавленные таблицы и связь между ними.
-
Добавим в бланк запроса поля, содержащие сведения о клиенте (поля Фамилия и Город) и заказах (поле Дата размещения), а также установим для них флажок Вывод на экран. Эти поля будут отображаться в результирующей таблице.
-
Далее перейдем на строку Условие отбора .
-
Выполним запрос, и на экране появится результирующая таблица, содержащая интересующую нас информацию (рис.).
Внутреннее и внешнее соединения
Внешнее соединение – это расширенная форма обычного или “внутреннего” соединения.
От внутреннего соединения внешнее отличается тем, что записи в одном отношении, которые не имеют соответствующих записей во втором, появляются в результате со значениями Null в позициях атрибутов второго отношения, вместо того, чтобы быть просто проигнорированными, как это делается в обычном внутреннем соединении.
Предположим, необходимо выяснить, кто из клиентов не сделал заказ.
Для создания внешнего соединения этих таблиц нужно выполнить следующие действия:
-
Создать запрос.
-
Включить в окно запроса таблицы “Клиенты” и “Заказы”. В верхней части окна «Конструктор запроса» отображается линия связи между двумя таблицами. По умолчанию MS Access устанавливает внутреннюю связь, соответствующую связи, установленной между этими таблицами в схеме данных.
-
Поместить в бланк запроса поля Фамилия, Город клиента из списка полей таблицы “Клиенты” и поле ИД заказа из списка полей таблицы “Заказы”.
-
Изменить связь с внутренней на внешнюю. Для этого дважды щелкните мышью по линии связи. В результате откроется окно диалога “Параметры объединения” (рис.).
Это окно содержит три опции. По умолчанию выбрана опция 1, устанавливающая внутреннюю связь.
Для установления внешней связи можно установить опцию 2 или 3. Установим, например, опцию 2, которая позволяет выбрать все записи из таблицы Клиенты и только те записи из таблицы Заказы, в которых значения в связанных полях совпадают. Обратите внимание на линию связи между таблицами. Она изменилась, теперь на конце линии, указывающей на список полей Заказы, появилась стрелка.
-
Выполнить запрос. При выполнении запроса в первом и втором столбцах будут отображаться сведения о клиентах, а в третьем столбце - код заказа. Если клиент не делал заказы, то третий столбец будет пуст.
Результаты выполнения внешнего соединений таблиц Клиенты и Заказы показаны на рис..
Вровь изменим параметры объединения и выберем опцию 3.