Представление запроса на языке SQL
Теперь посмотрим, как будет выглядеть наш запрос на программном языке. Переведенный на язык SQL, он называется «инструкция SQL» и представляет точный аналог запроса, сформированного в окне конструктора. Предполагается, что если бы пользователь захотел написать данный запрос на SQL, то он (запрос) выглядел именно так, как показано в этой инструкции. Чтобы увидеть такую инструкцию SQL, дважды щелкните правой кнопкой мыши в верхней части окна конструктора, где уже сформирован запрос (см. рис. 11.5). В появившемся контекстном меню выберите опцию Режим SQL. В результате вы перейдете в окно просмотра инструкций SQL. Это же окно можно открыть и другими способами:
• в меню Вид панели меню Microsoft Access активизировать опцию Режим SQL;
• щелкнуть по стрелке прокрутки рядом с кнопкой
на панели инструментов, а затем снова выбрать режим SQL.
Текст инструкции SQL приведен на рис. 11.8. Рассмотрим ее подробнее.
Рис. 11.8
Любой запрос в форме SQL состоит из нескольких ключевых слов и начинается с команды SELECT. Она определяет возвращаемую информацию как набор записей и указывает, какие поля должны быть выбраны в ответ на запрос. Если после SELECT нет других ключевых слов, то будут возвращены все записи. Следующие элементы строки, которая начинается ключевым словом SELECT, – это Код, Страна и Примечания. Они задают поля, включаемые в результат запроса.
Согласно синтаксическим правилам языка SQL перед именем каждого поля указывается имя таблицы, которой принадлежит это поле. Названия таблицы и поля разделены точкой, а каждая пара значений (например, Страны. Код) отделяется от следующей пары запятой.
Ключевое слово FROM определяет таблицу, откуда производится выборка. В данном простейшем запросе используется одна таблица – Страны, не связанная с другими. Поэтому после FROM никаких ключевых полей нет.
Ключевой параметр WITH OWNER ACCESS OPTION не является обязательным. Он позволяет пользователям, которым обычно не разрешается работать с базовыми таблицами, выполнить запрос и просмотреть его результаты – поля, включенные в запрос. Таким образом, пользователь получает право ограниченного доступа к данным таблицы.
Запросы с использованием групповых операций
Эта группа запросов предназначена для первичной обработки полученной информации – ее суммирования, осреднения и т. д. Такие запросы особенно полезны, когда нужно регулярно представлять обобщенные справки для руководства компании.
Еще один пример простого запроса: необходимо получить справку о том, сколько человек погибло в результате различных аварий за два с лишним года – с начала 1997 по апрель 2000 года. Полная информация по этому вопросу аккумулирована в таблице Es_oper. В каждой записи о конкретной аварии сведения о жертвах содержатся в поле В том числе погибло.
Запрос, построенный таким образом, востребует данные только из одной таблицы – Es_oper.
Чтобы сконструировать этот запрос, сначала, как и в предыдущем примере, откройте окно базы данных. Затем задайте команды Создание запроса в режиме конструктора Показать таблицу (рис. 11.3). В появившемся окне выберите таблицу Es_oper. На экране возникнет окно конструктора запроса (см. рис. 11.9). В макете таблицы Es_oper на этом рисунке найдите интересующее вас поле В том числе погибло и щелкните по нему дважды.
Рис. 11.9
Итак, поле В том числе погибло зафиксировано в бланке запроса. Теперь подумаем, как получить сумму значений этого поля по всем записям. Суммирование – стандартная операция, и пользователю не надо специально организовывать сложение (хотя при большом желании вы можете сделать это). Для этого можно использовать опцию Групповые операции. Щелкните по кнопке
на панели инструментов базы данных, и в бланке запроса появится дополнительная строка Групповая операция (обратите внимание, что на рис. 11.4 ее нет). Если вы теперь щелкнете в этой строке на пересечении с полем В том числе погибло, то появится стрелка прокрутки, которая позволяет открыть список групповых операций:
• Группировка – команда, включаемая в инструкцию SQL. Эта опция позволяет добиться того же результата, что и выполнение следующих действий: создание итогового запроса в окне запроса, а затем выбор для соответствующего поля групповой операции в строке Групповая операция (см. рис. 11.9);
• Sum – функция, выполняющая суммирование значений в поле;
• Avg – операция, позволяющая вычислить среднее арифметическое набора чисел, которые содержатся в указанном поле запроса;
• Min – функция, возвращающая минимальное значение из набора значений, которые содержатся в указанном поле запроса;
• Max – функция, возвращающая максимальное значение из набора значений, которые содержатся в указанном поле запроса;
• Count – операция, с помощью которой вычисляется количество записей, возвращаемых запросом;
• StDev – функция, которая возвращает значение среднеквадратичного отклонения. Последнее вычисляется исходя из набора значений, содержащихся в указанном поле запроса;
• Var – функция, возвращающая значение дисперсии. Дисперсия вычисляется в соответствии с теми значениями, которые содержатся в указанном поле запроса;
• First – операция, возвращающая первое число из набора значений, которые содержатся в указанном поле запроса;
• Last – операция, возвращающая последнее число из набора значений, которые содержатся в указанном поле запроса;
• Выражение – функция, возвращающая результат выражения, которое содержится в указанном поле запроса;
• Условие – функция, которая определяет, какие записи из таблиц, перечисленных в предложении FROM, следует включить в результат выполнения инструкций SELECT, UPDATE или DELETE.
Из приведенного списка вы, конечно, выберете Sum, так как вас интересует (если вы еще об этом не забыли) суммарное количество погибших. Активизировав соответствующую опцию (см. рис. 11.9), закройте окно конструктора запроса и сохраните изменения (см. рис. 11.6). Теперь следует назвать новый запрос или согласиться с именем, предлагаемым по умолчанию (это, конечно же, Запрос с порядковым номером). Под полученным именем новый запрос будет «прописан» в окне базы данных. Если вас такой вариант не устраивает, можете воспользоваться кнопкой
Если вы теперь откроете этот запрос, то получите ответ, представленный на рис. 11.10. Здесь указано имя функции (Sum), имя активного поля (В том числе погибло) и количество погибших за весь период (5531 человек).
Рис. 11.10
Уже показанным раньше способом перейдем к инструкции SQL (см. рис. 11.11).
Рис. 11.11
По сравнению с инструкцией SQL, изображенной на рис. 11.8, здесь появился элемент – AS [Sum В том числе погибло]. Смысл его состоит в следующем. В Microsoft Access имена полей (здесь – поле В том числе погибло), указанные в режиме SQL окна запроса, используются в режиме таблицы в качестве заголовков столбцов. Чтобы вывести в режиме таблицы другие имена столбцов (в нашем примере – Sum – В том числе погибло) , следует включить в инструкцию SQL зарезервированное слово AS. Это бывает необходимо, если вы используете статистические функции в запросах, которые возвращают слишком сложные или повторяющиеся имена полей. Таким образом, рядом с исходным полем В том числе погибло появляется новое поле суммы – Sum – В том числе погибло, поэтому и требуется добавить ключевое слово AS. Что касается квадратных скобок, в которые заключены имена полей в инструкции SQL, то здесь вы имеете дело со спецификой синтаксиса Access. Если имя поля не содержит пробелов, Access автоматически помещает название в квадратные скобки, а если содержит, то может и не поставить их. Поэтому советуем на всякий случай всегда заключать имена полей в квадратные скобки.
Запросы с дополнительными условиями
Теперь несколько усложним задачу: введем в запрос критерии отбора. Поначалу они будут довольно простыми, но постепенно станут усложняться. Как правило, необходимость в запросах подобного типа возникает эпизодически – при анализе каких-либо отдельных аспектов рассматриваемой чрезвычайной ситуации.
Запросы, в которых критерием является полное значение поля
Начнем с самого простого условия. Допустим, необходимо узнать, какие фирмы из общего числа предприятий, включенных в банк данных, работают в России. Все фирмы перечислены в таблице Фирмы, и поиск по запросу будет проводиться в ее пределах (пока мы создаем только простые запросы, то есть те, что отбирают данные из одной таблицы). Как открыть окно конструктора запроса и включить в бланк конструктора нужную таблицу, вы уже знаете. Поэтому начнем сразу с открытого бланка (см. рис. 11.12).