ЛАБОРАТОРНАЯ РАБОТА № 2 Тема: «Создание запросов» Теоретические сведения. При работе с таблицами можно в любой момент выбрать из базы данных необходимую информацию с помощью запросов. Запрос - это обращение к БД для поиска или изменения в базе данных информации, соответствующей заданным критериям. С помощью Access могут быть созданы следующие типы запросов: запросы на выборку, запросы на изменение, перекрестные запросы, запросы с параметром. Одним из наиболее распространенных запросов является запрос на выборку, который выполняет отбор данных из одной или нескольких таблиц по заданным пользователем критериям, не приводящий к изменениям в самой базе данных. Создание запроса Для начала создания запроса следует открыть базу данных, и, перейдя на вкладку Запросы выбрать Создание запроса в режиме конструктора. Появится окно Добавление таблицы. Рисунок 1.Диалоговое окно Добавление таблицы Через диалоговое окно Добавление таблицы добавляются имена таблиц в окно конструктора запроса. Это окно состоит из трех вкладок, содержащих перечни объектов, предлагаемых программой для проектирования запроса: Таблицы, Запросы и Таблицы и запросы. При выборе вкладки Таблицы следует выделить нужную нам таблицу из предложенного списка и с помощью кнопки Добавить можно добавить несколько таблиц. Например, на рис.1 выбрана таблица Студенты. Имена таблиц должны быть представлены в окне конструктора запроса (рис 2). Окно конструктора запроса Окно конструктора (рис.2) разделено на две части. В верхней части находятся окна таблиц со списками полей. Имя каждой таблицы отображается в строке заголовка такого окна. Рисунок 2. Окно конструктора запроса. Пример ввода условия. Нижняя часть является бланком запроса, или, как его называют, QBE – областью (Query by Example – запрос по образцу). Здесь указываются параметры запроса и данные, которые нужно отобрать, а также определяется способ их отображения на экране. Для перемещения из верхней панели окна в нижнюю панель и обратно используется клавиша F6. Включение полей в запрос В запрос не следует включать все поля выбранных таблиц. Добавить нужные поля в бланк запроса можно путем перетаскивания их имен из списка, находящегося в верхней части окна конструктора в строку бланка Поле. Еще один способ – двойной щелчок по имени поля. Например, на рис.2 в бланк запроса включены поля Фамилия, Имя и Отчество, Дата_рождения из таблицы Студенты. В строке Вывод на экран выведены на экран. флажком помечаются те поля, которые должны быть В общем случае поля, вводимые в наборе записей запроса, наследуют свойства, заданные для соответствующих полей таблицы. Можно определить другие значения свойств, выполнив команду Свойства из меню Вид: Описание (текст, содержащий описание объекта), Формат поля (представление данных на экране), Число десятичных знаков (для числовых данных, Маска ввода, Подпись (заголовок столбца). Удалить поле из бланка запроса можно клавишей [Delete] или через меню Правка командой Удалить столбцы. Чтобы удалить таблицу, следует маркировать ее в верхней части окна конструктора запроса, выполнив щелчок по имени, и нажать [Delete] или в меню Правка командой Удалить. Установка критериев отбора записей При создании запроса можно задать критерии, вследствие чего по запросу осуществлен отбор только нужных записей. будет Чтобы найти записи с конкретным значением, в каком либо поле, нужно ввести это значение в данное поле в строке бланка QBE Условие отбора (см. рис.2). Критерии, устанавливаемые в QBE – области, должны быть заключены в кавычки. Если ACCESS идентифицирует введенные символы как критерии отбора, то заключает их в кавычки автоматически, а если нет, то сообщает о синтаксической ошибке. Например, как показано на рис.3, построен запрос, по которому из данных по баллам будут выбран студент с фамилией введенной пользователем в диалоговое окно при запуске запроса. Виды критериев Для создания запроса с несколькими критериями пользуются различными операторами. Можно задать несколько условий отбора, соединенных логическим оператором или (or), для некоторого поля одним из двух способов: 1) можно ввести все условия в одну ячейку строки Условие отбора, соединив их логическим оператором Оr. В этом случае будут выбраны данные, удовлетворяющие хотя бы одному из условий. Например, запись 4 Оr 5 соответствует тому, что будут выбраны фамилии с оценками 4 или 5. Рисунок 3. Пример записи условия с использованием оператора или (or). 2) ввести второе условие в отдельную ячейку строки или. И если используется несколько строк или, то чтобы запись была выбрана, достаточно выполнения условий хотя бы в одной из строк или, как, например, показано на рис. 4. Рисунок 4. Пример записи условия с использованием оператора или (or). При такой записи условия также будут выбраны фамилии с оценками 4 или 5. Логическая операция и (And) используется в том случае, когда должны быть выполнены оба условия и только в этом случае запись будет выбрана. Например, записав условие >2 And < 5 будут выбраны только оценки 3 и 4. Рисунок 5. Пример записи условия с использованием оператора And(и). Чтобы объединить несколько условий отбора оператором и (and), следует привести их в одной строке. Например, на рисунке 6 показано, как можно задать условие для выбора фамилий студентов, проживающих в городе Тирасполе, которые учатся только на 5. Рисунок 6. Пример записи условия с использованием оператора и (Аnd ). Исключить группу данных из состава анализируемых запросом записей позволяет следующий критерий Not ИВТ Рисунок 7. Пример записи условия с использованием оператора Not. В этом случае будут выведены фамилии и мена всех студентов кроме студентов специальности ИВТ. Аналогичный результат будет получен, если записать условие в виде <> ИВТ. Операторы и и или применяются как отдельно, так и в комбинации. Следует помнить, что условия связанные оператором и выполняются раньше условий, объединенных оператором или. Оператор Between Оператор Between позволяет задать диапазон значений, например: between 10 and 20 будет выбраны значения поля от 10 до 20 включительно. Оператор In позволяет задавать используемый для сравнения список значений. Например: in (“первый”,”второй”,”третий”) Оператор Like Оператор Like полезен для поиска образцов в текстовых полях, причем можно использовать шаблоны: * — обозначает любое количество ( включая нулевой) символов; ? — любой одиночный символ; # — указывает что в данной позиции должна быть цифра. Например: для выбора фамилии, начинающейся с буквы П и с окончанием “ов” можно записать like П * ов Операторы для даты и времени Можно ввести дату и время, при этом значения должны быть заключены между символами #. Например: #10 мая 2004# >#31.12.03# Реализуем запрос, выбирающий студентов, сдавших экзамен с апреля по май 2009 года. Условие запроса будет выглядеть следующим образом: Рисунок 8. Пример записи условия с использованием оператора # для данных, имеющих тиа Дата/Время. Пример условия, изображенного на рисунке 9, позволит выбирать данные по значениям даты начальной и конечной, введенных пользователем. Рисунок 9. Пример записи условия З ап р осы с вычи сл яемыми п олями . И т оговые зап р осы. Создадим запрос, который вычисляет номер курса, на котором учится студент. Создайте новый запрос в режиме конструктора. Добавьте в бланк запроса из таблицы Студенты поля Фамилия, Имя, Группа. Для реализации данной задачи, нам необходимо использовать выражение разности текущего года и года поступления, который указывается в первых двух цифрах в названии группы. Для создания выражения в вычисляемом поле щелкните по пустому полю в бланке QBE, а затем по кнопке панели инструментов окно Построитель выражений (рис. 10). Построить, при этом откроется Рисунок 10 Окно построителя выражений с примером выбора функции Year Выбрав нужную функцию из списка, нажимаем на кнопку Вставить. Чтобы выбрать поле таблицы, необходимо открыть папку таблицы в окне построителя, выделить нужное поле и нажать Вставить (см. рис. 11). Рисунок 11 Окно построителя выражений с примером выбора поля Группа В результате у вас должно получиться следующее выражение: Выражение1: Year(Now())-(2000+CInt(Left([Студенты]![Группа];2))) Year(Now())– возвращает значение года из системной даты Year(дата) – функция (аргументом является значение даты или поле, содержащее значение даты), которая возвращает значение года из даты, например Year(12.03.2009) вернет значение 2009. Left([Студенты]![Группа];2) – вырезает слева 2 символа из значения поля Группа. CInt(Left([Студенты]![Группа];2)) – переводит в числовой тип данных вырезанные 2 символа функцией Left(). 2000+CInt(Left([Студенты]![Группа];2)) –формирует значение года поступления. Все имена объектов, из которых строится выражение для вычисления, заключены в квадратные скобки, причем перед именем поля может стоять восклицательный знак ( ! ) разделяющий его и имя таблицы. Запустите запрос на выполнение. В последнем столбце вы должны получить значение курса. Измените заголовок столбца. Вместо Выражение1 введите Курс. Для этого перейдите в режим Конструктора, в заголовке последнего столбца, куда вводилось выражение, удалите до двоеточия Выражение1 и введите перед двоеточием Курс Закройте запрос, сохраните его с именем Вычисление номера курса. Итоговые запросы Итоговые запросы значительно отличаются от обычных запросов. В них поля делятся на 2 типа: - поля, по которым осуществляется группировка данных; - поля, для которых проводятся вычисления. Создадим итоговый запрос, в котором подсчитывается количество студентов на каждой специальности. В режиме Создать запрос в режиме конструктора добавьте таблицу Студенты. В бланк запроса поместите поля Специальность и Фамилия. Нажмите на кнопку Групповые операции на панели инструментов. В результате чего в бланке запроса появится строка Групповая операция. Если для соответствующего поля из списка выбрать функцию Группировка (рис 12), то при выполнении запроса записи по этому полю группируются по значениям в этом поле, но итог не подводится. Группировка в итоговом запросе производится только по одному полю. Во всех остальных полях вводятся итоговые функции. Рисунок 12. Строка Групповая операция в бланке QBE Access предоставляет ряд функций, обеспечивающих выполнение групповых операций. Можно задать нужную функцию, набрав на клавиатуре ее имя в строке, Групповая операция или выбрав ее из раскрывающегося списка. Основные групповые функции, которыми можно воспользоваться: SUМ - вычисляет сумму всех значений заданного поля (для числовых или денежных полей), отобранных запросом; AVG - вычисляет среднее значение в тех записях определенного поля, которые отобраны запросом ( для числовых или денежных полей); MIN - выбирает минимальное значение в записях определенного поля, отобранных запросом; MAX – выбирает максимальное значение в записях определенного поля, отобранных запросом; COUNT – вычисляет количество записей, отобранных запросом в определенном поле, в которых значения данного поля отличны от нуля; FIRST - определяет первое значение в указанном поле записей; LAST -. определяет последнее значение в указанном поле записей. Для поля Фамилия выберите из раскрывающегося списка в строке Групповые операции функцию COUNT. Запустите запрос на выполнение Изменим подпись поля COUNT_Фамилия на Количество студентов. Для этого перейдите в режим Конструктора, щелкните правой клавишей мыши по полю Фамилия, выберите Свойства, в строке Подпись введите Количество студентов. Запустите запрос и убедитесь, что столбец переименован. Сохраните запрос с именем Количество студентов по специальностям. Запросы к нескольким таблицам Запросы можно создавать для отбора данных как из одной, так и из нескольких таблиц. Запросы к нескольким таблицам производятся аналогично запросам к однотабличным БД с той лишь разницей, что в окно конструктора запроса добавляются все таблицы, данные которых нужны в запросе. Создадим запрос, который будет подсчитывать средний балл каждого студента. В режиме Конструктора добавьте таблицы Студенты и Экзамены. В бланк запроса поместите поля: Фамилия, Имя, Специальность, Группа, Оценка. Нажмите на кнопку Групповые операции. В строке Групповая операция выберите из списка функцию AVG. Запустите запрос. На калькуляторе проверьте правильность вычисления среднего значения. Переименуйте поле AVG_ баллы в Рейтинг. Закройте запрос, сохранив его под названием Рейтинг студентов. САМОСТОЯТЕЛЬНО ВЫПОЛНИТЬ: 1 вариант С помощью Конструктора создать запросы, удовлетворяющие условиям: 1. вывести на экран информацию о студентах специальности ИВТ и ТМС; 2. фамилии студентов, начинающиеся с определенной буквы (использовать шаблоны); 3. вывести на экран фамилии студентов, обучающихся на втором курсе специальности ИВТ (использовать в качестве источника данных только таблицу Студенты); 4. вывести на экран фамилии и имена студентов, проживающие в городе Тирасполь или обучающиеся на специальности Электроэнергетика (ЭЭ); 5. количество студентов, сдавших меньше 2 экзаменов; 6. запрос, вычисляющий возраст студентов. 2 вариант С помощью Конструктора создать запросы, удовлетворяющие условиям: 1. вывести на экран информацию о студентах, проживающих в городе Бендеры; 2. фамилии студентов, заканчивающиеся на “ов”; 3. вывести на экран информацию о студентах, обучающихся не на 2 курсе (использовать шаблоны); 4. вывести на экран фамилии студентов, родившихся в первой половине года. 5. вывести информацию о студентах во время сдавших экзамены; 6. вычислить количество иногородних студентов (не проживающих в Тирасполе), обучающихся на специальности ИВТ.