Выше уже был рассмотрен пример создания многотабличного запроса, но при помощи мастера простых запросов. Сейчас создадим такой запрос «с нуля» в режиме конструктора. Зададимся целью вывести информацию по клиентам, заказам, сделанным ими и сумме оплаты по каждому заказу. Из такой таблицы будет видно, какой клиент наиболее активный (по числу заказов) и сколько денег он принес фирме.
Для создания запроса выполните следующее:
- Выберите вкладку Запросы, затем Создание запросов в режиме конструктора.
- Добавьте в запрос три таблицы Клиенты, Заказы и Оплата, как показано на рис. 8.
(Рис. 8)
- Поставьте сортировку по возрастанию для поля ФамилияКонтакта.
- Запустите запрос и определите наиболее активного клиента.
Сложные запросы на выборку
Построение сложных запросов на выборку подразумевает использование выражений – специальных конструкций, которые должны включать по меньшей мере один оператор и некоторые другие компоненты: литералы, идентификаторы, функции и др., что в общем называется операндами.
Основные операторы:
- Арифметические операторы. Выполняют простые арифметические операции:
- Сложение (+);
- умножение (*);
- вычитание (-);
- деление (/);
- целочисленное деление (\).
При целочисленном делении числа в числителе и знаменателе сначала округляются, затем вычисляется их частное, а затем округляется.
- Операторы сравнения. Сравнивают два операнда. Возвращают логические значения (True, False, Null). К этому типу относятся следующие операторы:
- Больше (>);
- больше или равно (>=);
- меньше (<);
- меньше или равно (<=);
- не равно (<>).
- Логические (булевы) операторы. Они так же возвращают значения True, False, Null. Некоторые из них:
- Логическое И (And);
- Включающее ИЛИ (Or);
- Логическое НЕТ (Not);
- Исключающее ИЛИ (Xor).
Все логические операторы, за исключением оператора Not, всегда работают с двумя операндами.
- Операторы конкатенации. Служат для объединения нескольких строк в одну. Обозначаются: &.
- Операторы идентификации. Программа Access работает с двумя идентификаторами:!(восклицательный знак) и. (точка). С помощью этих символов можно обращаться к конкретным объектам, например, к полю таблицы. Символ «!» используется вместе с различными зарезервированными словами, синтаксис его использования такой: Класс объекта!Имя объекта. Символ «.» отделяет имена объектов от их свойств, синтаксис следующий: Класс объекта!Имя объекта.Свойство.
- Прочие операторы. Это операторы языка SQL, такие как Like, ls, ln, Between.. And, с помощью которых можно упростить создание выражений.
- ls. Используется в выражениях ls Null или ls not Null. Они определяют наличие или отсутствие нулевого значения.
- Like. Проверяет, соответствует ли строковое выражение заданному шаблону. Шаблоны составляются при помощи символов: *(любое число символов),? (любой одиночный символ), # (любая цифра), [список] (любой символ из списка), [!список] (любой символ, не принадлежащий списку).
- ln. Проверяет, проверяет совпадает ли значение с одним из элементов, указанных в списке. Например ln(“Украина”, “Россия”). Соответственно этому критерию будут отобраны записи, содержащие значение «Украина» или «Россия».
- Between …And. Определяет, принадлежит ли числовое значение заданному диапазону, например, Between #01-янв-1995# And #01-дек-1996#.
Литералы. Это используемые в MS Access значения в их собственном представлении. Они бывают следующих типов:
- Числовые. Вводятся как ряд чисел, могут содержать знак разделителя (в десятичной дроби), знак «-» для отображения отрицательных значений. Например, 3,4567E-01, 120, -23.
- Текстовые. Включают любые строковые символы (А-Я, A-Z), числа от 0 до 9, знаки пунктуации, специальные символы клавиатуры. Строковые символы нужно заключать в кавычки, например, “ул. Лермонтова”.
- Литералы даты и времени. В приложении Access знак # ставится до и после даты, хотя, если дата задана в стандартном распознаваемом Access формате, то это необязательно.
Функции. В программе Access можно использовать как встроенные функции, так и создавать свои. Вот некоторые часто используемые функции:
· Функции даты и времени (приведены в виде примеров)
o Date(). Отображает текущую дату в формате дд.мм.гггг;
o DateAdd(“d”,-15,[ДатаЗаказа]). Возвращает дату, предшествующую дате заказа на 15 дней.
o Datediff(“d”,[ДатаЗаказа],[ДатаИсполнения]). Представляет разницу числа дней между датой исполнения и датой заказа.
o Year(#12.06.08#). Возвращает год указанной даты, т.е. 2008.
· Функции обработки текста
o Format (Date, “dd-mmm-yyyy”). Возвращает текущую дату, отформатированную в указанном формате.
o LnStr(“ГОРОД”,”Р”). Укажет номер позиции, начиная с которой вторая фраза входит в первую.
o LCase(“ГОРОД”). Преобразовывает к нижнему регистру.
· Функции преобразования типа данных
o Val(“12,34”) – текст “12,34” преобразуется в число 12,34
o Str(123,6) – число 123,6 преобразуется в текст “123,6”
· Функции тригонометрические и финансовые (без примеров)
Приступим к созданию сложных запросов.
Запрос по дате исполнения: Вывести в результирующую таблицу коды заказов, выполненных за период с 1 декабря 2007 г. по 1 января 2008 г. включительно. При этом использовать оператор языка SQL: Between …And. Указать код клиента и код метода доставки.
Откройте конструктор запросов, добавьте в него таблицу Заказы. Поместите требуемые поля в строку Поле (это КодЗаказа, КодКлиента, ДатаИсполнения, КодМетодаДоставки). В поле Условие отбора для поля ДатаИсполнения введите условие: Between #01.12.2007# And #01.01.2008#. Запустите запрос и сохраните его под именем ЗапросПоДатеИсполнения.
Запрос по должности или фамилии сотрудника: Вывести в результирующую таблицу информацию о всех сотрудниках фирмы, чья фамилия начинается с буквы «П» или его должность – менеджер.
Откройте конструктор запросов, добавьте в него таблицу Сотрудники. Поместите все поля в строку Поле. Оформите бланк запроса так, как показано на рис. 9:
(Рис. 9)
Запустите его и сохраните по именем ДолжностьИЛИФамилия.
Запрос по должности и фамилии сотрудника: Вывести в результирующую таблицу информацию о всех сотрудниках фирмы, чья фамилия начинается с буквы «П» и должность – менеджер.
Откройте конструктор запросов, добавьте в него таблицу Сотрудники. Поместите все поля в строку Поле. Оформите бланк запроса так, как показано на рис. 10:
(Рис. 10)
Запустите его и сохраните по именем ДолжностьИФамилия.
Запрос по цене и марке товара: Вывести в результирующую таблицу все товары, удовлетворяющие одному из условий: либо это товары марки «Галена», цена которых больше 200 р., либо это товары фирмы «Байер», цена которых меньше 100 р. Товары упорядочить по алфавиту.
Откройте конструктор запросов, добавьте в него таблицу Товары. Поместите все поля в строку Поле. Оформите бланк запроса так, как показано на рис. 11:
(Рис. 11)
Выполните и сохраните запрос под именем ЦенаИМаркаТоваров.