Чтение онлайн

на главную

Жанры

Access 2002. Самоучитель
Шрифт:

В случае, который мы сейчас рассматриваем, в запрос включены все поля записи. Это можно сделать двумя способами. Первый путь: введите в бланк запроса каждое поле по отдельности, как вы делали раньше. Второй вариант: введите в бланк все поля сразу. Открыв пустое окно запроса, дважды щелкните мышью по строке имени таблицы на ее макете, чтобы выделить в нем все поля таблицы. Затем установите указатель мыши в выделенной области и нажмите левую кнопку мыши. Не отпуская ее, перетащите стрелку указателя в строку Поле первого столбца в бланке запроса. Теперь отпустите кнопку – все поля записи будут введены в бланк.

Дайте команду на выполнение созданного запроса (как это сделать, уже обсуждалось). В результате вы получите перечень аварий на нефтепроводах (см. рис. 11.16).

Рис. 11.16

Теперь посмотрим, как будет выглядеть в данном примере инструкция SQL, приведенная на рис. 11.17.

Рис. 11.17

Как

видите, по своей структуре, то есть по составу ключевых параметров, эта инструкция совпадает с предыдущей. Разница лишь в том, что предложение с ключевым словом SELECT включает не одно, как в предшествующем случае, а все поля записи. Синтаксические правила записи каждого отдельного поля, естественно, не изменяются.

Разумеется, подобные критерии можно вводить одновременно в разные поля бланка запроса. В нашем случае используем логическую схему «И»: компонентами составного критерия будут отдельные критерии для различных полей записи базы данных. Поясним это на примере, который представляет собой расширенный вариант только что рассмотренной ситуации.

Запросы с несколькими критериями отбора, заданными в разных полях

Сформулируем новый запрос так: «По информации, собранной в таблице Fiie1 , выдать справку об авариях на нефтепроводах Тюменской области».

Окно конструктора для этого запроса показано на рис. 11.18. Как видите, здесь заданы два критерия: прежний – "*нефтепровод*", дополнительный – "Тюменская область". (Слово «область» можно было и не вводить: название Тюменская уникально и само по себе служит достаточным критерием.) Новый критерий тоже можно заключить в звездочки. Результатом выполнения запроса будет таблица, выведенная на рис. 11.19.

Рис. 11.18

Рис. 11.19

Обратите внимание, что в предыдущем примере, где не указывался конкретный регион, было отобрано 8 записей. В настоящий момент, как и следовало ожидать, их число сократилось: записей только 2.

Теперь изучим соответствующую инструкцию SQL (см. рис. 11.20). Как видно из рисунка, введение нового критерия отбора влияет только на предложение с ключевым словом WHERE. К этому предложению добавляется логическое выражение типа AND (И), операндами которого являются "*нефтепровод*" и "Тюменская область". В остальном инструкция SQL остается неизменной.

Рис. 11.20

Запросы с несколькими критериями отбора, заданными в одном поле

Мы уже привыкли к тому, что в одном запросе может быть много критериев для отбора записей. Это вполне естественно, когда речь идет о разных полях записи, потому что каждое из них подобно независимой (или почти независимой) оси координат, а каждый критерий – конкретному значению координаты по данной оси. Но когда требуется задать несколько критериев отбора применительно к одному полю записи, задача усложняется. Посмотрим, как ее следует решать.

Предположим, пользователя интересуют аварии не только на нефтепроводах, то есть при транспортировке самой нефти, но и шире – при транспортировке различных нефтепродуктов: бензина, мазута, газового конденсата и др. Как выбрать в таком случае критерий отбора? Можно просто ввести в поле подстроку «провод», поскольку этот корень входит во многие слова, связанные с нашей темой: нефтепровод, бензопровод и т. д. Но тогда в выборку неизбежно попадут аварии на газопроводах (которых тоже немало), что не входит в наши планы. Итак, нам неизбежно придется задавать несколько критериев отбора для одного и того же поля записи и связывать их определенными логическими соотношениями. Покажем на конкретном примере, как это делается.

Предположим, надо получить справку об авариях, которые произошли:

• на нефтепроводах;

• на мазутопроводах;

• на бензопроводах;

• на продуктопроводах.

Мы предусмотрели практически все виды нефтепродуктов. Теперь построим соответствующий запрос.

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

"*нефтепровод " OR «*бензопровод*» OR «*мазутопровод*» OR «*продуктопровод*».

Иначе говоря, вы выстраиваете логическую схему «ИЛИ». Теперь посмотрим, как она реализуется на практике.

Откройте окно конструктора запроса для таблицы Fiie1. Как и раньше, введите значение первого критерия – «*нефтепровод*» – в строку Условие отбора на ее пересечении со столбцом Характеристика ЧЭС. Следующие значения критериев вводятся в этом же столбце, но в строках, расположенных ниже по вертикали. Каждая из них помечена словом OR (Или) – рис. 11.21.

Рис. 11.21

Количество таких строк практически не ограничено, поэтому составной критерий может включать достаточно большое число операндов. Запустив запрос на выполнение, вы получите таблицу (см. рис. 11.22). Обратите внимание, что она похожа на результирующую таблицу, представленную на рис. 11.16, когда вы сформировали запрос с одним критерием. Однако в новой таблице отобрано уже не 8 записей, а 15, и среди аварийных объектов назван, в частности, мазутопровод.

Рис. 11.22

Наконец, открыв инструкцию SQL (см. рис. 11.23), вы можете лишний раз убедиться: все изменения, которые внесены вами в логические схемы критериев, точно отображаются в предложении с ключевым параметром WHERE.

Рис. 11.23

Надо сказать, что структуры критериев бывают самыми разнообразными. Но при их построении вам потребуются точность и аккуратность, чтобы отбор записей производился правильно. Например, у критериев, выведенных на рис. 11.21, неизменяемая часть слова – «*опровод*». Исключением является лишь «*нефтепровод*». Казалось бы, можно сократить условие в той его части, где вводятся критерии. Чтобы при этом исключить записи, связанные с авариями на газопроводах, сформулируем условие следующим образом:

(«*нефтепровод*» OR «*опровод*») AND Not «*газопровод*»

Если вы введете такое условие в запрос, а затем выполните его, то система действительно отберет записи, удовлетворяющие заданному критерию. Однако в их число попадут и сведения об авариях, связанных с повреждением водопровода или электропроводки. Поэтому учтите, что похвальное стремление к краткости и упрощению критериев запроса иногда приводит к нежелательным последствиям.

Запросы с параметрами

Иногда для получения какой-либо справки приходится неоднократно вводить различные значения одного и того же параметра. Такая справка называется параметрической. Например, на практике сведения об авариях на нефтепроводах обычно собираются по субъектам Российской Федерации – краям и областям. Для подобных случаев полезно иметь готовый типовой запрос: вы вводите в стандартное поле название края или области, а в результате получаете справку стандартного вида. Такой запрос несложно построить.

Откройте запрос, который был сохранен под именем Запрос4 (см. рис. 11.18). В поле Регион вместо значения Тюменская область поместите подсказку [Введите область] – рис. 11.24.

Рис. 11.24

Если теперь вы дадите команду на выполнение запроса (с помощью кнопки

или предварительно сохранив его в окне базы данных), то Access 2002 потребует сначала указать название области или края в диалоговом окне Введите значение параметра. Этот этап работы продемонстрирован на рис. 11.25.

Рис. 11.25

Вам следует ввести полное географическое наименование, а затем щелкнуть по кнопке ОК. Запрос будет выполнен для заданного региона. Например, вы вводите значение Тюменская область и получаете таблицу, которую уже видели на рис. 11.19. Понятно, что точно так же можно задать любой другой критерий. Как видите, типовой запрос оперативен и удобен в использовании.

На рис. 11.26 показана инструкция SQL для такого запроса. Вы можете вновь убедиться, что соответствующие изменения уже включены в предложение с ключевым параметром WHERE. В данном случае в этом предложении применяется логическая схема «И», которая содержит в качестве операндов и нефтепровод*", и приведенную выше подсказку. Иными словами, Access воспринимает ее как значение критерия.

Рис. 11.26

Запросы с участием нескольких связанных таблиц

Запросы этой группы применяются, если пользователю необходима информация, которая содержится не в одной, а в нескольких таблицах.

Для начала вернемся к уже рассмотренному примеру, когда вы создали запрос на выборку российских фирм из одной таблицы – Фирмы, а в качестве критерия использовали код России – «0 6» (см. рис. 11.12). Попробуем сформулировать этот же запрос более естественным образом, задав условием отбора название страны – Россия.

Откройте окно конструктора запроса и введите в него две таблицы: Фирмы и Страны. Как и раньше, вы используете таблицу Добавить таблицу, но теперь по очереди выбираете из нее две или более таблицы (см. рис. 11.3). Вы снова указываете в таблице Фирмы поле Название фирмы, а в таблице Страны – поле Страна; однако в ячейке Условие отбора столбца Страна вводите критерий Россия (см. рис. 11.27).

Рис. 11.27

Отправив запрос на выполнение, вы получите таблицу, содержащую отобранные сведения (см. рис. 11.28). Она похожа на таблицу с рис. 11.13, но вместо кода содержит название страны.

Рис. 11.28

Если вы теперь откроете инструкцию SQL (рис. 11.29), то увидите в ней новый элемент, который указывает на связь между таблицами Фирмы и Страны. Это ключевое слово INNER JOIN. Операция INNER JOIN доступна в любом предложении FROM и позволяет осуществить самое простое связывание – объединить записи двух таблиц, если их связующие поля содержат одинаковые значения. При этом INNER JOIN определяет объединяемые таблицы, а другое ключевое слово ON – объединяемые поля, которые имеют одинаковые значения.

Рис. 11.29

Поделиться:
Популярные книги

Я не Монте-Кристо

Тоцка Тала
Любовные романы:
современные любовные романы
5.57
рейтинг книги
Я не Монте-Кристо

Отмороженный 7.0

Гарцевич Евгений Александрович
7. Отмороженный
Фантастика:
рпг
аниме
5.00
рейтинг книги
Отмороженный 7.0

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Мама из другого мира. Делу - время, забавам - час

Рыжая Ехидна
2. Королевский приют имени графа Тадеуса Оберона
Фантастика:
фэнтези
8.83
рейтинг книги
Мама из другого мира. Делу - время, забавам - час

Мама из другого мира. Чужих детей не бывает

Рыжая Ехидна
Королевский приют имени графа Тадеуса Оберона
Фантастика:
фэнтези
8.79
рейтинг книги
Мама из другого мира. Чужих детей не бывает

Жена моего брата

Рам Янка
1. Черкасовы-Ольховские
Любовные романы:
современные любовные романы
6.25
рейтинг книги
Жена моего брата

Бастард

Осадчук Алексей Витальевич
1. Последняя жизнь
Фантастика:
фэнтези
героическая фантастика
попаданцы
5.86
рейтинг книги
Бастард

Ненастоящий герой. Том 1

N&K@
1. Ненастоящий герой
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Ненастоящий герой. Том 1

Бывший муж

Рузанова Ольга
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Бывший муж

Идеальный мир для Лекаря

Сапфир Олег
1. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря

Мастер 4

Чащин Валерий
4. Мастер
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Мастер 4

Адепт. Том второй. Каникулы

Бубела Олег Николаевич
7. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.05
рейтинг книги
Адепт. Том второй. Каникулы

Кукловод

Злобин Михаил
2. О чем молчат могилы
Фантастика:
боевая фантастика
8.50
рейтинг книги
Кукловод

Ваше Сиятельство 3

Моури Эрли
3. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 3