- •Часть 2
- •Часть 2
- •Содержание
- •1. Конструктор запросов 4
- •2. Запрос на выборку. 13
- •1. Конструктор запросов
- •Создание выражений с помощью Построителя выражений
- •2. Запрос на выборку.
- •2.1. Запрос, основанный на одной таблице и использующий простое условие
- •2.2. Простая выборка из двух связанных таблиц.
- •2.3. Запрос, использующий вычисляемые поля
- •2.4. Запрос с группировкой
- •2.5. Запрос, использующий связь таблицы с самой собой (рекурсивное соединение)
- •2.6. Запрос, использующий две ссылки на одну таблицу
- •2.7. Выборка повторяющихся записей
- •2.8. Поиск несовпадающих записей
- •2.9. Другие сведения, полезные при разработке запросов
- •3. Запрос на удаление записей.
- •3.1. Запрос на удаление всех записей из таблицы (очистка таблицы)
- •3.2. Запрос на удаление с ограничением числа удаляемых записей
- •3.3. Запрос на удаление с применением внешнего объединения таблиц
- •4. Запрос на добавление записей в существующую таблицу
- •4.1. Запрос на добавление записей во временную таблицу текущей базы данных
- •4.2. Запрос на добавление записей во временную таблицу внешней базы данных
- •5. Запрос на обновление записей в таблице.
- •5.1. Простой запрос на обновление записей
- •5.2. Запрос на обновление полей нескольких связанных таблиц.
- •6. Запросы на объединение.
- •6.1. Запрос на объединение, связывающий воедино однотипные таблицы из различных баз данных.
- •7. Перекрестные запросы
- •7.1. Создание перекрестного запроса при помощи мастера
- •7.2. Сознание перекрестного запроса при помощи конструктора запросов
- •8. Запросы с параметрами
- •9. Подчиненные запросы
- •9.1. Использование подчиненных запросов в выражениях для условий отбора записей
- •9.2. Использование подчиненных запросов в определении полей основного запроса.
- •10. Свойства полей запросов
- •11. Свойства запросов
2.1. Запрос, основанный на одной таблице и использующий простое условие
Допустим, нужно выбрать из таблицы Заказы названия всех клиентов, заказы у которых были размещены в 1998 году и расположить их в алфавитном порядке. Для этого сначала создайте новый запрос, нажав кнопку Создать и выбрав в диалоговом окне Новый запрос пункт Конструктор. Затем нужно добавить к запросу таблицу Заказы и перетащить из нее в бланк запроса поля Название Получателя и Дата Размещения. В строке Условие отбора для поля Дата Размещения введите условие: Between #01.0l.98# And #31.12.98# и снимите флажок Вывод на экран. Для поля Название Получателя установите порядок сортировки по возрастанию. Если перейти в режим просмотра, то будет видно, что наименования некоторых клиентов выводятся много раз (ровно столько, сколько раз ссылка на клиента попадается в исходной таблице Заказы. Чтобы избежать этого, нужно открыть окно Свойства запроса, щелкнув на соответствующей кнопке панели инструментов (или выбрав одноименный пункт контекстного меню и установить свойство Уникальные значения в значение Да. На рис.2.1. изображен получившийся запрос в режиме конструктора, в режиме таблицы и соответствующая строка оператора SQL.
|
|
Рис. 2.1. Запрос, основанный на одной таблице и использующий простое условие
Пояснения
а). Функция Between ... And определяет принадлежность значения выражения указанному диапазону. Полный синтаксис:
выражение [Not] Between значение_ 1 And значение 2, где:
б) Конструкции SQL.
SELECT — задает требование к Microsoft Jet (ядро базы данных, которое обслуживает запросы) на выборку данных, тем самым определяя тип запроса. В предложении SELECТ перечисляются все поля, которые должны войти в результирующий набор данных, в том числе вычисляемые.
DISTINCT — необязательный предикат, использующийся совместно с предложением SELECT. Задает выборку только уникальных результирующих записей. Указывается после ключевого слова SELECT перед списком выбираемых полей. Предикат DISTINCT появился в операторе автоматически после того, как для свойства запроса уникальные значения было задано значение Да.
FROM. В этом предложении задаются имена одной или нескольких исходных таблиц (запросов). Здесь же указываются связи между таблицами, если они есть.
WHERE. В этом предложении задаются условия, согласно которым отбираются записи из исходных таблиц (запросов).
ORDER BY. Здесь можно задать порядок сортировки для каждого из полей, входящих в это предложение. Порядок сортировки указывается после каждого наименования поля в предложении ORDER BY и может принимать значения ASC (по возрастанию) или DESC (по убыванию). Если порядок сортировки не указан, то подразумевается — по возрастанию (ASС).
Точка с запятой (;) — обязательно указывается в конце оператора SQL.
2.2. Простая выборка из двух связанных таблиц.
Допустим, нужно выбрать города и наименования клиентов, заказы у которых были размещены в 1998 году, расположив их в алфавитном порядке по возрастанию. Для этого сначала нужно создать новый запрос в режиме конструктора и добавить в него две таблицы — Заказы и Клиенты. Поскольку между этими таблицами существует постоянная связь на уровне базы данных, то она будет автоматически отображена в конструкторе. Затем в бланк запроса необходимо перетащить поля Город и Название из таблицы Клиенты и поле Дата Размещения из таблицы Заказы. Для поля Дата Размещения введите условие: Between #01.01.98# And #31.12.98# и снимите для него флажок Вывод на экран, а для полей Город и Название установите порядок сортировки по возрастанию. Осталось только установить свойство запроса Уникальные значения в значение Да (как и в предыдущем примере), и запрос готов. Таким образом, сконструированный запрос изображен на рис.2.2 (в режиме конструктора, в режиме таблицы и SQL-оператор). Ниже приведены необходимые пояснения.
|
|
Рис. 2.2. Простая выборка из двух связанных таблиц
Пояснения конструкции SQL.
В предложении FROM задаются не только наименования исходных таблиц (запросов), но и связи, их объединяющие. В данном примере указано внутреннее объединение между таблицами (INNER JOIN) по полям КодКлиента обеих таблиц. Внутреннее объединение означает, что из связанных таблиц выбираются только те записи, значения связанных полей которых совпадают, остальные игнорируются
