Шрифт:
Теперь попробуем усложнить задачу и сформировать универсальный запрос. Предположим, вы постоянно работаете с той частью объединенного банка данных, которая включает сведения о контрольно-измерительных приборах. Иначе говоря, вы имеете дело с базой данных Контрольно-измерительные приборы. Вам приходится создавать запросы, очень разнообразные по своему построению. Однако вам некогда вникать в структуру таблиц и связей между ними, а также разбираться в том, какие таблицы нужны для подготовки ответа на какой-либо запрос. Необходимо более простое решение. Конечно, можно построить запрос с параметрами, но есть и другой путь. Он не противоречит первому варианту, а скорее дополняет его.
Введите в окно конструктора все таблицы базы данных Контрольно-измерительные приборы со всеми их связями (см. рис. 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 предусмотрены и запросы других типов:
• на создание таблицы;
• на добавление записей в таблицу;
• на удаление записей из таблицы;
• на обновление записей в таблице;
• перекрестный запрос.