Отбор
повторяющихся записей и записей без подчиненных
Типичной операцией,
которую приходится выполнять в базе данных, является поиск дубликатов, т. е.
повторяющихся записей в таблице. Например, можно выяснить, не встречается ли
в таблице "Клиенты" (Customers) одна и та же фирма несколько раз.
При этом необходимо сначала определить, какие записи считать дубликатами. В
данном случае дубликатами мы будем считать организации с одинаковыми названиями
и адресами. Можно создать запрос, который найдет все такие записи. Для этого
проще всего воспользоваться соответствующим мастером:
Рис. 8.27.
Диалоговое окно Мастера поиска повторяющихся записей
Рис. 8.28.
Запрос, отбирающий повторяющиеся записи в таблице "Клиенты"
In (SELECT [Название]
FROM [Клиенты] As Tmp GROUP BY [Название],[Адрес] HAVING Count(*)>l And
[Адрес] = [Клиенты].[Адрес])
Это выражение включает
еще один запрос. Такой запрос называется
подчиненным
запросом
(подробнее
о подчиненных запросах см. разд. "Создание подчиненных запросов"
в конце данной главы).
Чтобы посмотреть, как полностью выглядит инструкция
SQL, соответствующая этому запросу, нужно перейти в режим SQL.
Совет
Мы рекомендуем при работе с запросами в режиме Конструктора чаще открывать окно Режим SQL (SQL View). Изучая, как Access создает инструкции SQL, можно постепенно выучить этот язык. Правда, помните, что в данном случае мы имеем дело с диалектом стандартного языка SQL — Access SQL. Ниже мы расскажем, чем он отличается от стандартного языка SQL (см. разд. "Сравнение ANSI и Jet SQL" данной главы).
Такой поиск
разумно выполнять также в таблицах, которые экспортированы из другой среды,
например Excel. Эти таблицы могут содержать дублирующие записи, которые нужно
найти и удалить. Для удаления дубликатов можно воспользоваться процедурой, которая
описана в справке Access в разделе
Работа с запросами, Работа с запросами
на изменение, Удаление повторяющихся записей из таблицы.
Еще один мастер
позволяет найти все записи в главной таблице, которые не имеют связанных записей
в подчиненной таблице (обратной ситуации быть не должно, если вы правильно установили
флажки, обеспечивающие целостность данных)
(см. также разд. "Поддержка
целостности данных" гл. 2).
Чтобы создать
запрос, который покажет всех клиентов, которые не имеют заказов:
В бланке запроса
в столбце "КодКлиента" задано условие — Is Null. Это означает, что
выбираются все клиенты, код которых отсутствует в таблице "Заказы"
(Orders). Вы можете использовать это условие всякий раз, когда нужно отыскать
записи, у которых одно из полей пусто.
Рис. 8.29. Запрос для поиска записей, не имеющих подчиненных записей