Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Access часть2.doc
Скачиваний:
34
Добавлен:
14.08.2019
Размер:
6.24 Mб
Скачать

2.7. Выборка повторяющихся записей

Для создания запроса на поиск повторяющихся записей проще всего воспользоваться услугами соответствующего мастера. Нажмите кнопку Создать окна базы данных и из списка в окне Новый запрос выберите пункт Повторяющиеся записи. На экране появится первое окно мастера (см. рис. 2.8(а)). Выберите из списка в этом окне таблицу Заказы и нажмите кнопку Далее. В списке доступных полей во втором окне мастера выберите поле КодКлиента и нажмите кнопку с изображением ">", после чего — кнопку Далее. (см. рис. 2.8(б)). В третьем окне мастера по созданию запроса просто нажмите кнопку Далее, в четвертом — кнопку Готово. В итоге Microsoft Access создаст запрос под именем Поиск повторений для Заказы, выбирающий клиентов из таблицы Заказы, записи о которых встречаются более одного раза, и подсчитывающий количество упоминаний о них. Запрос представлен на рис. 2.9.

Рис. 2.8.Окно мастера Поиск повторяющихся записей.

Рис. 2.9. Запрос для поиска повторяющихся записей

Пояснения

а). Поле КодКлиента в бланке запроса фигурирует три раза — один раз с групповой операцией First, второй раз с групповой операцией Count, а третий раз с групповой операцией Группировка. Это приводит к тому, что все клиенты группируются по коду клиента, для каждой группировки в поле КодКлиента поле выбирается первое попавшееся значение (а оно для всех записей, входящих в каждую группировку, — одинаковое) и подсчитывается количество записей в конкретной группировке (при помощи функции Count). Если убрать из бланка запроса поле КодКлиента с групповой операцией Группировка, то запрос выдаст в режиме таблицы всего одну запись, а именно — первый попавшийся код клиента и общее количество записей таблицы Заказы.

б). Запрос, созданный мастером, можно подкорректировать в режиме конструктора — изменить названия полей, задать подходящий порядок сортировки, добавить еще какие-либо поля.

в). Конструкция SQL HAVING используется только в случае применения групповых операций и в SQL-операторе следует непосредственно за предложением GROUP BY. Так же как и конструкция WHERE, конструкция HAVING задает условия, налагаемые на записи. Формат условных выражений для обеих конструкций одинаков. Смысл использования предложений WHERE и HAVING следующий: условия, задаваемые в конструкции WHERE, используются на этапе начального отбора записей (до группировки); условия же конструкции HAVING налагают ограничения на уже отобранные и сгруппированные записи, т.е. в результирующий набор записей, отображаемый в режиме таблицы, попадут только те из уже сгруппированных записей, которые удовлетворяют всем условиям конструкции HAVING.

2.8. Поиск несовпадающих записей

Рано или поздно возникает проблема поиска записей одной таблицы, для которых нет соответствующих записей в другой таблице. Например, может возникнуть необходимость синхронизировать таблицы, которые случайно или намеренно заполнялись разными операторами независимо друг от друга. Для решения этой стандартной проблемы в поставку Microsoft Access входит соответствующий мастер. Для иллюстрации работы с вышеупомянутым мастером попробуем найти записи о клиентах из таблицы Клиенты, для которых не было выписано ни одного заказа, Нажмите кнопку Создать окна базы данных и в диалоговом окне Новый запрос выберите пункт Записи без подчиненных. На экране будет отображено первое окно мастера (см. рис. 2.10(а)). В этом окне нужно из списка выбрать таблицу, в которой необходимо найти записи, не имеющие соответствующих в другой таблице.

Выберите таблицу Клиенты и нажмите кнопку Далее. Следующее окно мастера аналогично первому и предназначено для указания второй таблицы. Выберите здесь таблицу Заказы и снова нажмите кнопку Далее. Таким образом, мы указали мастеру, что собираемся искать записи таблицы Клиенты, для которых нет соответствия в таблице Заказы. Снова нажмите кнопку Далее. В третьем окне мастера представлены два списка, в которых содержатся поля выбранных перед этим таблиц (см. рис. 2.10(б)). В этом окне нужно выбрать поля обеих таблиц, используемых для сопоставления (т.е. поля, при помощи которых таблицы будут связаны между собой). Если между таблицами установлены постоянные связи по каким-либо полям, то эти поля автоматически предлагаются мастером. В нашем случае мастер предложит связать таблицы по полям КодКлиента. Оставьте все как есть и нажмите кнопку Далее. В четвертом окне мастера выберите поля, которые должны присутствовать в результирующем запросе (например, КодКлиента, Название, Город), и нажмите кнопку Далее. В последнем окне мастера можно указать имя для созданного запроса. Полученный запрос представлен на рис. 2.11.

Рис. 2.10. Первое и третье окно мастера Поиск несовпадающих записей.

Рис 2.11. Запрос для поиска несовпадающих записей.

Пояснения

а). Обратите внимание на рис. 2.11. Линия связи между таблицами Клиенты и Заказы имеет несколько необычный вид. Со стороны таблицы Заказы линия связи оканчивается стрелкой. Таким образом, обозначаются связи, имеющие внешний тип объединения. В частности, в описываемом примере мастер сформировал левое внешнее объединение.

Это означает, что в итоговую выборку попадут все записи из таблицы Клиенты и только те записи из таблицы Заказы, для которых связанные поля обеих таблиц совпадают. Итоговая выборка будет содержать как поля таблицы Клиенты, так и поля таблицы Заказы. Однако в записях, содержащих незадействованных клиентов, поля из таблицы Заказы будут содержать значение Null (т.е., другими словами, не будут содержать никаких значений). Задав для одного из этих полей условие Is Null, мы получим список клиентов, для которых нет связанных записей в таблице Заказы.

б). Условие Is Null, указанное для поля, означает, что отбираться будут только те записи, в которых это поле не содержит никакого значения (имеет значение Null). Если необходимо решить противоположную задачу, т.е. в итоговой выборке должны быть только те записи, в соответствующем поле которых обязательно содержится какое-нибудь значение, используйте конструкцию Is Not Null.

в). Левое внешнее объединение таблиц указывается в SQL-операторе в предложении FROM. Для этого используются ключевые слова LEFT JOIN. Если вы хотите, чтобы в итоговую выборку попали все записи из таблицы Заказы и только связанные записи из таблицы Клиенты, в предложении FROM нужно указать конструкцию RIGHT JOIN (правое внешнее объединение). Хотя в данной ситуации такой тип объединения не имеет смысла.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]