Access 2002. Самоучитель
Шрифт:
Теперь попробуем усложнить задачу и сформировать универсальный запрос. Предположим, вы постоянно работаете с той частью объединенного банка данных, которая включает сведения о контрольно-измерительных приборах. Иначе говоря, вы имеете дело с базой данных Контрольно-измерительные приборы. Вам приходится создавать запросы, очень разнообразные по своему построению. Однако вам некогда вникать в структуру таблиц и связей между ними, а также разбираться в том, какие таблицы нужны для подготовки ответа на какой-либо запрос. Необходимо более простое решение. Конечно, можно построить запрос с параметрами, но есть и другой путь. Он не противоречит первому варианту, а скорее дополняет его.
Введите в окно конструктора все таблицы базы данных Контрольно-измерительные приборы со всеми их связями (см. рис. 2.1). (Позднее
Допустим, вы хотите узнать, какие приборы используются для измерения тех или иных физических параметров. На рис. 11.30 показан бланк соответствующего запроса. В этом же окне конструктора вы видите макеты всех таблиц, содержащихся в нашей базе данных. (Отметим, что не все таблицы будут привлекаться в конкретных запросах.) На рис. 11.31 выведена результирующая выборка записей, полученная в ответ на ваш запрос.
На рис. 11.32 показана инструкция SQL для этого запроса. Мы видим, что все ключевые слова сохраняются, как и прежде, на своих местах, но их содержание становится богаче и разнообразнее.
Предположим, что пользователь интересуется другой проблемой: какими приборами для измерения кислотности занимается менеджер по фамилии Флеминг. На рис. 11.33 показан заполненный бланк соответствующего запроса. Вы видите, что здесь в разных столбцах введено два условия отбора: «*кислотн*» и «Флеминг».
В то же время перечень таблиц и схема связей между ними остаются неизменными. Результат выполнения этого запроса приведен на рис. 11.34. Отобраны сведения лишь о тех приборах для измерения кислотности, которыми ведает менеджер Флеминг. Если сравнить рис. 11.34 с рис. 11.31, то можно легко заметить, что число отобранных записей существенно сократилось – с 91 до 5.
Рис. 11.34
Пояснения к инструкции SQL
Теперь более подробно исследуем инструкцию SQL, приведенную на рис. 11.35. Мы несколько раз усложняли структуру запроса, поэтому и инструкция нуждается в определенном комментарии.
В предложении с ключевым словом SELECT содержится перечень используемых в запросе таблиц и их полей. Как уже говорилось, группы (Имя таблицы. Имя поля) разделяются между собой запятыми, а внутри группы имя таблицы отделяется от имени поля точкой. Если в имени есть пробел, оно заключается в квадратные скобки. Параметр SELECT имеет следующий синтаксис:
SELECT [предикат] [* | таблица.* |] [таблица. ]поле 1
[AS псевдоним 1] [, [таблица. ]поле 2 [AS псевдоним 2] […]]}
FROM выражение […] [IN внешняя База Данных]
[WHERE…]
[GROUP BY…]
[HAVING…]
[ORDER BY…]
[WITH OWNERACCESS OPTION]Перечислим аргументы ключевого слова SELECT:
• предикат. Задается один из следующих предикатов отбора:
– ALL;
– DISTINCT;
– DISTINCTROW;
– TOP.
Предикаты ограничивают число возвращаемых записей. Если предикат не указан, по умолчанию используется ALL. Это означает, что выбраны все поля заданной таблицы или таблиц;
• таблица. Указывается имя таблицы, из которой надо отобрать записи;
• поле_1, поле_2. Указываются имена полей, откуда следует отбирать данные. Сведения будут извлекаться из полей в том порядке, в каком они перечислены;
• псевдоним_1, псевдоним_2. Задаются имена, которые станут заголовками
• выражение. Здесь указываются имена одной или нескольких таблиц, содержащих необходимые данные;
• внешняя База Данных. Вводится имя той базы данных, где расположены таблицы, которые указаны с помощью аргумента выражение, но находятся за пределами текущей БД.
При выполнении операции SELECT Access 2002 находит указанную таблицу или таблицы, извлекает из нее (из них) необходимые столбцы, выделяет строки, которые отвечают условию отбора, а затем сортирует или группирует результирующие строки в заданном порядке. (Отметим, что инструкции SELECT не изменяют ни сами данные, ни их расположение в БД.)
Обычно слово SELECT является первым словом инструкции SQL, поскольку большая часть этих инструкций относится к типу SELECT или SELECT… INTO.
Минимальный синтаксис инструкции SELECT таков:SELECT поля FROM таблица
Чтобы были отобраны все поля таблицы, добавьте символ звездочки (*).
Если несколько таблиц, включенных в предложение FROM, содержат одноименные поля, то перед именем каждого из таких полей следует ввести имя таблицы и оператор «точка» (.).
Предложение с ключевым словом FROM описывает связи между таблицами. По мере усложнения этих связей все более важную роль играет конструкция INNER JOIN… ON, которая имеет следующий синтаксис:FROM таблица 1 INNER JOIN таблица 2 ON таблица 1.поле 1 оператор таблица 2.поле 2
Ниже перечислены аргументы операции INNER JOIN:
• таблица_1, таблица_2. Здесь указываются имена таблиц, записи которых нужно объединить;
• поле_1, поле_2. Задаются названия объединяемых полей. Если они не являются числовыми, то должны быть однотипными и содержать однотипные данные. В то же время объединяемые поля могут иметь разные имена;
• оператор. Выбирается любой оператор сравнения (символы, входящие в каждый оператор, заключены в прямые кавычки):
– "=,";
– "<,";
– ">,";
– "<=,";
– ">=,";
– "<>".
Параметр WHERE содержит условия отбора – критерии, вводимые в запрос, и имеет следующий синтаксис:WHERE условие отбора
Создание объединенной выборки
В предыдущих разделах мы рассмотрели большую группу запросов на выборку, в том числе запросы с использованием нескольких таблиц, объединенных связями. Однако в системе Access 2002 предусмотрены и запросы других типов:
• на создание таблицы;
• на добавление записей в таблицу;
• на удаление записей из таблицы;
• на обновление записей в таблице;
• перекрестный запрос.
Запросы всех названных типов могут не только использоваться по прямому назначению, но и быть частью более сложных, комплексных запросов. Предположим, вам необходимо получить выборку записей из таблиц, не объединенных связями. Мы подробно рассмотрим пример такого запроса, а заодно и работу с запросами перечисленных типов.
Пример сложного запроса
Как вы помните, в объединенном банке данных содержатся три базы данных. Все они имеют различное происхождение. БД ЧЭС и Контроль ЧС непосредственно связаны с оперативной информацией о всевозможных чрезвычайных ситуациях (ЧС). Следовательно, вполне естественна такая постановка задачи: получить из этих двух баз данных единую выборку сведений о ЧС определенного типа (скажем, происшедших в конкретном регионе).
В том, что таблицы этих БД не соединены связями, нет никакого скрытого подвоха. Конечно, разное происхождение баз данных наложило отпечаток на их структуру: записи из различных БД построены неодинаково, отличаются по составу и формату полей. Все это осложняет работу пользователя. В принципе многие таблицы из разных БД достаточно легко объединить с помощью связей. Однако в каждой базе данных есть свои словари, на которых должны основываться важнейшие таблицы (об этом шла речь в главе 3), поэтому коды одних и тех же понятий могут не совпадать. Информация в базах данных может дублироваться (дата возникновения ЧС, регион и т. д.). Таким образом, связи между обеими БД не реализованы отнюдь не по принципиальным, а скорее по методическим причинам. Но интеграция возможна и в этих условиях. Мы хотели показать читателю, что система Access 2002 позволяет преодолевать серьезные трудности, даже если иногда они создаются несколько искусственно.