Манипулирование данными. Языка описания запросов QBE. Создание (формирование) запросов в Mіcrosoft Access, страница 5

Access может установить связь между таблицами не только на критерии равенства. В таких случаях графическими средствами Access связь определить нельзя. При формировании запроса QBE в поле главной таблицы можно в строке условий задать выражение сравнения с полем (полями) подчиненной таблицы. Выражение определяет интервал значений. Такая конструкция запроса предписывает включать в объединение такие комбинации записей главной и подчиненной таблиц, у которых значение поля главной таблицы принадлежит интервалу значений подчиненной. При построении результата запроса Access для каждой записи главной таблицы находит запись, принадлежащую интервалу, указанному в запросе. Фактически выполняется SQL-запрос с конструкцией WHERE.

В примерах  Запрос Text_Order, Тексты_приказов_сотрудника (база Personal) обратите внимание на некорректность условия поиска для фамилий на русском языке.

В выражения сравнения можно использовать любые операторы сравнения (Between, In, >, <, >=, <=, <>). Возможно объединение на основе строковых полей с использованием функции InStr (проверка вхождения подстроки в строку). Например, в главной таблице содержатся слова, которые входят в сообщения, хранящиеся в подчиненной таблице.

Запросы на объединение

QBE-запросы не позволяют выполнить запросы на объединение таблиц. Для этой цели применяются SQL-запросы. Запрос на объединение предназначен для объединения кортежей, принадлежащих двум или более запросам. Объединяемые запросы должны иметь одинаковую структуру – содержать идентичные или однотипные поля.

Чтобы создать запрос данного типа следует щелкнуть по инструменту Запрос-объединение панели конструктора запросов. Далее в пустом окне вводится конструкция вида:

запрос_1 UNION запрос_2, где запрос – SQL-предложение:

SELECT список полей FROM источник WHERE условие .

Список полей 1-го запроса определяет заголовки результата объединения. Запросы должны иметь одинаковое число полей, соответствующие по порядку следования поля запросов должны иметь одинаковые или схожие типы данных. Если во втором запросе число полей меньше, можно включить в список пустой заголовок  “” .

Примечание.При использовании запроса на объединение типы данных «Число» и «Текст» являются совместимыми.

Для конструирования запроса на объединение можно использовать два QBE-запроса на выборку. Достаточно перейти в режим SQL, чтобы получить соответствующую SQL-инструкцию, которую можно скопировать и вставить в бланк запроса на объединение.

По умолчанию при объединении удаляются дубликаты. Чтобы отключить проверку на дубликаты и ускорить исполнение запроса, следует использовать конструкцию UNION ALL. Так поступают в случаях, когда появление дубликатов маловероятно или не имеет существенного значения, а также, когда важно проанализировать имеющиеся дубликаты.

В запросах допускается группирование данных (конструкция GROUP BY или HAVING). Сортировка (предложение ORDER BY) включается в конец запроса на объединение и применяется только объединенным данным. Критерии отбора кортежей (WHERE условие) применяются в каждом запросе до объединения, выборка из объединенных кортежей невозможна.

В запросах можно использовать псевдонимы (конструкция AS). Псевдоним применяется и для идентификации данных – можно добавить в каждую из инструкций на выборку текстовую строку в качестве поля. В список полей запроса можно включить конструкцию:

“строка_i” AS type .

Тогда кортежи результата будут содержать поле type, значение которого равно строка_1 либо строка_2, в зависимости от принадлежности кортежа первому либо втором запросу.