Базы данных Microsoft Access 2003

         

Создание простых запросов



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

  •  список всех растений из базы данных, отсортированный в алфавитном порядке;
  •  список лечебных растений;
  •  список каталогов, с помощью которых приобретались некоторые растения;
  •  количество растений, приобретенных с использованием каждого каталога.




Использование мастера простых запросов



Ранее при работе с базой данных вы уже использовали несколько мастеров Access, облегчающих выполнение различных операций в Access. Да и теперь самый простой способ создания запроса заключается в применении мастера. Чтобы построить запрос, выполните следующие действия.

1. Запустите Access и загрузите базу данных Растения.

2. Выберите ссылку Запросы в окне Растения: база данных.

3. Дважды щелкните на ссылке Создание запроса с помощью мастера. Откроется окно мастера, показанное на рис. 7.1.



Рис. 7.1. Окно Создание простых запросов


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

5. Выберите в списке Доступные поля поле Имя и щелкните на кнопке со стрелкой вправо для переноса этого поля в список Выбранные поля.

6. Дважды щелкните на названии поля ЛатинскоеИмя в списке Доступные поля. Поле будет перенесено в список Выбранные поля.

7. Щелкните на кнопке Далее для перехода во второе окно мастера.

8. Введите название запроса ИменаРастений и выберите переключатель Открыть запрос для просмотра данных (рис. 7.2).



Рис. 7.2. Последнее окно мастера создания запросов


9. Щелкните на кнопке Готово для создания запроса и откройте его в режиме таблицы, как показано на рис. 7.3.



Рис. 7.3. Новый запрос, открытый в режиме таблицы


Хотя таблица запроса напоминает обычную таблицу данных, между ними есть определенные различия.

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


Далее мы продолжим разговор о работе с данными в таблице запроса, но пока что вы должны закрыть его, щелкнув на кнопке Закрыть.

Создание запроса на основе другого запроса



Запрос ИменаРастений основан непосредственно на таблице Растения. Но существует возможность создания запроса, основанного на другом запросе. Посмотрим, как это делается.

1. Из вкладки Запросы окна Растения: база данных запустите мастер создания простых запросов.

2. В раскрывающемся списке Таблицы и запросы выберите запрос ИменаРастений. Как видите, в списке Доступные поля указаны только поля из этого запроса.

3. Дважды щелкните на поле Имя для его переноса в список Выбранные поля.

4. Щелкните на кнопке Далее.

5. Присвойте новому запросу имя ДругиеИменаРастений.

6. Щелкните на кнопке Готово, и Access создаст новый запрос, таблица которого будет выглядеть так, как показано на рис. 7.4.



Рис. 7.4. Запрос, основанный на другом запросе


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

Использование нескольких таблиц



В окне мастера создания простых запросов сказано: «Допускается выбор нескольких таблиц или запросов». Но мы не будем принимать слова Access на веру и выполним такие действия.

1. Запустите мастер запросов из вкладки Запросы окна Растения: база данных.

2. Из раскрывающегося списка Таблицы и запросы выберите таблицу Растения.

3. Перенесите поля Имя и ЛатинскоеИмя из списка Доступные поля в список Выбранные поля.

4. Из раскрывающегося списка Таблицы и запросы выберите элемент Таблица: Типы. Обратите внимание, что отмеченные ранее поля остаются в списке Выбранные поля, а в списке Доступные поля появились поля таблицы Типы (рис. 7.5).

Учтите, что удаление данных запроса подразумевает их автоматическое удаление из таблицы. Будьте внимательны, с тем чтобы случайно не удалить важной информации.




Рис. 7.5. Создание запроса с полями из более чем одной таблицы


5. Перенесите поле Описание в список Выбранные поля.

6. Щелкните на кнопке Далее.

7. Введите Растения/Типы в качестве имени нового запроса и щелкните на кнопке Готово. Таблица полученного запроса показана на рис. 7.6.



Рис. 7.6. Запрос с полями из нескольких таблиц


Обратите внимание на повторяющиеся данные в столбце Описание. А как вы помните, в главе 6, «Использование взаимосвязей», подчеркивалось, в частности, что повторы недопустимы. Так что же здесь происходит?

В первую очередь следует четко уяснить, чем различаются между собой запросы и таблицы. Повторение данных в таблицах, конечно же, крайне нежелательно; вот почему повторяющиеся данные при разработке структуры базы данных были вынесены в отдельные таблицы. Хранение каждой единицы данных в отдельной области позволяет увеличить эффективность работы базы данных и помогает предотвратить возможные ошибки.

Хранение данных в реляционных (взаимосвязанных) таблицах имеет свои недостатки. В частности, в данных, содержащихся в таблицах, можно легко запутаться. Чтобы подтвердить это утверждение, достаточно вспомнить сложности, с которыми приходилось сталкиваться при вводе значений в поле Номер типа для растений во время настройки полей подстановки.

Совместное использование запросов таблиц предоставляет много новых возможностей. С помощью запроса данные можно хранить в удобной, наглядной для пользователя, реляционной форме, причем даже повторяющиеся данные, если в этом есть необходимость. Данные запроса вычисляются путем обработки таблиц, лежащих в его основе, и никогда не сохраняются, поэтому правило, предписывающее хранение не более чем одного блока данных в одном поле (правило 2 из главы 4), здесь не нарушается.

Работа с таблицей запроса



Таблицы запросов не только напоминают обычные таблицы, но и обладают схожими функциями. Все комбинации клавиш, указанные в главе 5, «Создание первых таблиц», также применимы для работы с запросами. Более того, таблицы запросов можно редактировать, как и таблицы базы данных. Вот как это делается.

1. Дважды щелкните на запросе ИменаРастений в окне Растения: база данных, и он будет открыт в режиме таблицы.

2. Щелкните на ячейке столбца Имя, где хранится значение Тысячелистник.

3. Измените это значение на Тысячелистник1 (рис. 7.7). Обратите внимание на небольшой значок в виде ручки, который появился слева от строки. Значок указывает на то, что произведенные изменения еще не были сохранены.



Рис. 7.7. Редактирование данных в таблице запроса


4. Щелкните на любой другой строке в таблице для сохранения изменений.

5. Закройте таблицу.

6. Выберите ссылку Таблицы в окне Растения: база данных.

7. Щелкните правой кнопкой мыши на ссылке Таблицы и выберите команду Открыть. Как видите, название растения поменялось, хотя использовалась таблица запроса.

8. Щелкните на имени Тысячелистник1 и измените его снова на имя Тысячелистник.

9. Закройте окно таблицы.

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



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

А что если запрос содержит данные из двух разных таблиц? Данные все равно доступны для изменения, однако результаты порой бывают непредсказуемыми. Проиллюстрируем сказанное на таком примере.

1. Щелкните на ссылке запроса Растения/Типы в окне Растения: база данных. Затем щелкните на кнопке Открыть, расположенной на панели инструментов.

2. Щелкните на ячейке, содержащей текст Тунбергия, и измените его на НеТунбергия.

3. Дважды нажмите клавишу <Таb> для перехода к последнему столбцу первой строки таблицы, в котором содержится значение Декоративное.

4. Введите значение Орнаментальное.

5. Еще раз нажмите клавишу <Таb>. Таблица теперь будет иметь вид, аналогичный показанному на рис. 7.8. Обратите внимание, что поле Декоративное везде заменено полем Орнаментальное.

6. Вернитесь в предыдущую строку, чтобы отменить произведенные изменения и вернуть бывшие значения полей.



Рис. 7.8. Редактирование данных в таблице запросов, основанной на двух таблицах


Результат, полученный при выполнении п. 5, наверняка вас удивил. Однако если задуматься о принципе работы запросов, загадка перестанет быть таковой. Запрос выбирает данные, как из таблицы Растения, так и из таблицы Типы, поэтому каждая строка запроса соответствует одной строке таблицы Растения. Названия полей Имя и ЛатинскоеИмя получены именно из таблицы Растения.

Но как насчет поля Описание, которое расположено в таблице Типы? Когда запрос выводит содержимое указанного поля, сначала используется значение Номер типа из таблицы Растения. С помощью этого значения запрос определяет строку таблицы Типы, которая должна соответствовать текущей строке таблицы Растения.

Итак, хотя поле Декоративное встречается в оригинальной таблице четыре раза, оно сохранено в базе данных лишь один раз. Запрос просматривает значения для каждой строки и, следовательно, отображает его все четыре раза.

А что же происходит при изменении значения? Запрос «знает» о том, какая строка в таблице Типы используется для получения исходного значения, и обновляет эту строку в таблице. Однако затем обрабатываются все другие строки, и значение обновляется везде, где встречается в строках. В следствие этого изменение одной строки данных влияет на другие строки запроса, в котором отображаются данные различных таблиц. Эта функция Access, называемая строковой привязкой, предотвращает отображение в запросе данных, которые отсутствуют в таблицах.


Содержание раздела