Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка Access.doc
Скачиваний:
15
Добавлен:
07.02.2016
Размер:
4.06 Mб
Скачать

2.2. Створення запитів, що відбирають дані з декількох таблиць.

При створенні таких запитів до верхньої частини вікна конструктора запитів обираємо дві чи більше таблиць. Якщо зв’язки поміж таблицями були створені у вікні “Схема данных”, то в цьому вікні вони з’являться автоматично. Тепер можна обирати до одного запиту поля з кількох таблиць. Існує два різних типу об’єднання двох таблиць – внутрішнє та зовнішнє. Якщо об’єднання внутрішнє (саме його ви встановили), то до одного запису запиту будуть об’єднані записи, в яких співпадають значення в полях зв’язку. Якщо який-небудь запис в одній таблиці не має відповідного запису в інший таблиці, він не буде включений до запиту. Зовнішнє об’єднання буде розглянуто пізніше.

Створення полів, що обчислюються. В таблицях баз даних (на відміну від електронних таблиць) ніколи не зберігають дані, які можуть бути обчислені по даним з таблиць. В більшості випадків тому, що це потребує значних витрат пам’яті та значно уповільнює пошук необхідних даних та обробку даних в таблицях. Всі необхідні обчислення виконують в запитах, створюючи поля, що обчислюються. Для створення таких полів в вільному стовпчику конструктора запитів записують нове ім’я поля, знак “:”, а потів вираз, що використовує імена інших полів та обчислює необхідне значення. Наприклад, обчислимо вартість замовлення, якщо є поле Вартість одиниці та поле Кількість одиниць. В новому стовпчику запишемо:

Вартість замовлення: [Вартість одиниці]*[Кількість одиниць]

Імена полів записуються у квадратних дужках.

При запису виразів можна використовувати вбудовані функції Access.Імена цих функцій на відміну від Excel не перекладені на російську, вони пишуться англійською, але за змістом багато з низ співпадає з функціями Excel.Наведемо декілька з них:

Iif(умова; вираз1; вираз2) – обчислює вираз1, якщо умова виконується, та вираз2, якщо умова не виконується.

DateDiff(“d”; дата1; дата2) - обчислює різницю між двома датами в днях. Якщо перший аргумент m–різниця дат обчислюється в місяцях, якщо y-в роках.

Повний список всіх функцій ви знайдете у вікні «Построитель выражений».

2.2.1. Створимо запит, що відбирає і об'єднує записи з двох таблиць - Книги і ЧитКниги, щоб показати які книги і коли були видані читачам. Передбачимо поле, що обчисляються з ім’ям Пеня, яка начисляється на кожну книгу, що не повертається вчасно, у розмірі 1% від вартості книги за кожний прострочений день. Створимо запит з ім’ям Список1. Для створення запиту Список1 перейдіть на вкладку Запросы й оберіть кнопку Создать. Додайте в запит таблиці Книги і ЧитКниги. У вікні схеми даних повинний бути показаний зв'язок між таблицями по полю Инв№ - інвентарний номер книги. Перетягніть мишею в нижню половину вікна поля, що необхідно включити до запиту: Автор, Название, Стоимость , Инв№, Дата выдачи, Дата возврата, NB-номер читацького квитка. Останнє поле буде потрібно для зв'язку запиту з таблицею Читачі. У першій вільній колонці нижньої частини вікна створіть поле, що обчислюється, з ім’ям Пеня. Для цього наберіть у верхньому рядку (де розташовується ім'я поля) такий текст:

Пеня: iif([Дата возврата]>Date(); DateDiff(“d”; [Дата возврата]; Date())*0,01*[Стоимость]; 0).

Рисунок 13. Використання Построителя выражений

Для створення такого виразу можна використати Построитель выражений. Для цього натисніть кнопку Построить на панелі інструментів. На екрані відкривається вікно Построителя выражений. В цьому вікні створюється вираз послідовним додаванням до нього полів таблиць або запитів, функцій, констант та операторів (рисунок 13). Імена полів записуються у квадратних дужках. Побудова запиту закінчена. Збережіть його під ім'ям Список1. Переконайтеся, що усе зроблено вірно, перегляньте запит, клацнувши на кнопці Открыть. Розмір пені, зрозуміло, залежить від поточної дати, на яку він обчислювався. Приклад наведено на 26.01.03.

Рисунок 14. Результат виконання запиту Список1

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

Для цього оберіть таблиці Книги, Читатели та запит Список1. До бланка запиту включіть поля Фамилия з таблиці Читатели, Инв№ з таблиці Книги, Стоимость з таблиці Книги та Пеня із запиту Список1. Для створення підсумкового запиту на панелі інструментів обираємо піктограму Групповые операции. У бланку запиту з'являється рядок Групповые операции. Для першого поля запиту Фамилия з таблиці Читатели обираємо Группировка, для Стоимость з таблиці Книги – SUM( підрахунок суми), для поля Инв№ з таблиці Книги- Count та для Пеня із запиту Список1- SUM( підрахунок суми). Для того щоб при перегляді запиту кожне поле мало зрозумілий підпис, визначимо властивості полів. Для цього обираємо

ВИД-Свойства та надаємо Подпись для кожного поля –Количество книг, Общая стоимость книг та Общая сумма пени.

Рисунок 15. Конструктор запита 2.2

Рисунок 16. Результат виконання запиту 2.2

2.2.3 Створення запиту на пошук записів, що не мають зв'язаних в іншому списку. Такі запити називаються«Записи без подчиненных». Для створення таких запитів необхідно змінювати тип об’єднання таблиць на зовнішній. При такому типу об’єднання до запиту обов’язково включаються всі записи з першої таблиці і до них додаються поля з другої таблиці, якщо для даного запису в другій таблиці є запис, для якого значення зв’язаних полів співпадають. Якщо в другій таблиці такого запису немає, то до запису з першої таблиці додаються поля з пустими значеннями з другої таблиці. Зовнішнє об’єднання в конструкторі таблиць зображується лінією зі стрілкою.

Наприклад, створимо список книжок, що не видані на руки читачам. До запиту включимо дві таблиціКниги таЧитКниги. Включимо до запиту поляИнв№, Шифр, Автор, Названиез таблиціКниги таИнв№ із таблиціЧитКниги. Знайдемо ті записи, що присутні у таблиціКниги та відсутні у таблиціЧитКниги. Для цього змінимоПараметры объединения.Необхідно створитиВнешнее объединение.Для цього двічі натисніть на лінії зв'язку між таблицями. У вікні діалогу оберіть другий тип – “Объединение ВСЕХ записей из ‘Книги' и только тех записей из 'ЧитКниги', в которых связанные поля совпадают.” Тепер створено зовнішнє об’єднання, до якого включені всі книжки з таблиціКниги. Для тих книжок , що не мають записів з таблиціЧиткнигивстановлюється значення ‘Null’, тому для поля Инв№ із таблиціЧитКниги встановимо такі параметриУсловие отбора– ‘Is Null’ та Вывод на экран відсутній.

Переконайтеся, що запит обирає необхідну інформацію.

Рисунок 17. Встановлення параметрів об’єднання

Рисунок 18. Результат виконання запиту 1.3

    1. Модифікація даних за допомогою запитів