Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_Rab_BD / Lab4 / metod4.doc
Скачиваний:
17
Добавлен:
20.04.2015
Размер:
104.45 Кб
Скачать

Лабораторная работа № 4. Использование запросов при проектировании приложений для работы с бд.

Введение:

При работе с БД широко применяется понятие запроса к ней. Под запросом понимается требование совершить определенное действие с информацией из БД. Можно выбрать данные в соответствии с заданным условием и отобразить результат – запрос на выборку. Можно также вставить, удалить, обновить определенные записи в БД, используя соответствующие запросы. Такие требования формируются на специальных языках программирования QBE и SQL. SQL нашел более широкое распространение, в Delphi его можно использовать при создании приложения для работы с БД.

Delphi может использовать операторы SQL для просмотра таблиц, для выполнения соединений между таблицами, создания отношений типа «один-ко-многим» или для выполнения практически любого действия, которое могут выполнить основные инструменты БД. Delphi также обеспечивает поддержку сквозного SQL (можно составлять операторы SQL и затем посылать их непосредственно Oracle, Sybase, Interbase или другому серверу).

Работа с запросами в DataBase Desktop 7.0:

Помимо работы с отдельными таблицами DBD 7.0 обеспечивает возможность создания, редактирования и выполнения запросов к БД, с помощью которых можно проводить обработку данных, удовлетворяющих заданным условиям, в нескольких таблицах БД. При работе с запросами используется язык структурированных запросов SQL (Structured Query Language). Хотя он и позволяет реализовывать весьма сложные запросы для получения и обработки данных, SQL является трудным для изучения, т.к. отличается от традиционных языков программирования. Но создавать запросы можно и не зная этот язык. В этом случае используется язык запросов по образцу QBE (Query By Examples), который позволяет формировать запросы с помощью визуального программирования.

Результатом выполнения запроса для выборки данных является временная таблица с данными, которые находятся в определенных в запросе полях и таблицах и удовлетворяют заданным условиям. Имя и расположение этой таблицы может быть задано в пункте меню Query|Properties.

QBE-запрос.

Для того, чтобы создать новый запрос, следует выбрать команду меню File|New|QBE Query. Она вызывает окно для выбора таблицы или таблиц БД, которые будут использоваться в запросе. Следует отметить, что список таблиц, входящих в запрос, можно позже менять.

Для добавления таблицы в запрос нужно выбрать команду меню Edit|Add Table, а затем выбрать требуемый файл с таблицей БД. Для удаления таблицы из БД запроса следует выбрать команду меню Edit|Remove Table.

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

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

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

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

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

Set – запрос на создание промежуточной таблицы. Выключатели полей должны быть отключены.

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

«галочка» – в результирующую таблицу будут помещены все неповторяющиеся значения из данного поля, упорядоченные по возрастанию значений;

«галочка с плюсом» - в результирующую таблицу попадают все значения из выбранного поля, сортировка не производится; неприменим к полям типа BLOB;

«галочка со стрелкой вниз» – при выводе данных, которые являются неповторяющимися, записи в результирующей таблице упорядочиваются по убыванию значений в данном поле; неприменим к полям типа BLOB;

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

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

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

Операции сравнения:

= - равенство (по умолчанию);

< - меньше;

> - больше;

<= - меньше или равно;

>= - больше или равно;

Арифметические операции:

+ - сложение чисел или объединение строк;

- - вычитание;

* - умножение;

/ - деление;

() – круглые скобки;

Выбор произвольных символов:

.. – любая последовательность символов;

@ - любой один символ;

Специальные операции:

LIKE – выбор значений, у которых первый символ совпадает с введенным в условие и более половины символов также совпадают; неприменима к полям типа BLOB;

NOT – отрицание введенного условия;

BLANK – отсутствие значений в поле;

TODAY – текущая дата в условии;

OR – логическая операция «ИЛИ» в условии;

, - логическая операция “И” в условии;

AS – в результирующей таблице поле будет иметь имя, заданное в условии;

! – позволяет вывести все значения из таблицы, независимо от того, есть они в связанной таблице или нет.

Агрегатные функции (определяют действия над значениями в записях, удовлетворяющих заданному условию, и неприменимы к полям типа BLOB):

AVERAGE – среднее значение;

COUNT – количество записей;

MAX – максимальное значение;

MIN – минимальное значение;

SUM – сумма;

ALL – сумма по всем значениям, относящимся к одной группе, в том числе и повторяющиеся;

UNIQUE - сумма по всем значениям, относящимся к одной группе, без повторений.

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

Редактор QBE-запросов в DBD 7.0 позволяет определить отображаемые записи в связанных таблицах.

Чтобы выполнить сформированный запрос, нужно задать команду меню Query|Run Query или воспользоваться клавишей F8.

Результаты выполнения запроса можно сохранить в таблице. Для этого нужно перейти в результирующую таблицу и задать команду меню Table|Info structure, затем в появившемся окне следует нажать кнопку Save as.

QBE-запрос можно перевести в SQL-запрос командой Query|Show SQL, но не любой QBE-запрос может быть переведен в запрос на языке SQL.

Пример № 1: Создание QBE-запроса.

По запросу будут выводится все поля из таблиц People.db и Tel.db:

  1. Создадим QBE-запрос с помощью команды меню File|New|QBE Query, выбрав файл People.db. В результате будет выведено окно со схематичным изображением полей таблицы People.db.

  2. Зададим команду Edit|Add File и выберем файл Tel.db. В результате в окне с полями таблицы People.db добавится отображение таблицы Tel.db.

  3. Выберем строку ввода, находящуюся в прямоугольнике, который соответствует полю IDPeople, входящему в таблицу People.db, и нажмем кнопку F5. Введем в нее значение join1; заметим, что оно должно отобразиться красным цветом.

  4. Тоже самое проделаем для поля IDPeople таблицы Tel.db.

  5. Поочередно выберем выключатели, находящиеся в первых прямоугольниках, соответствующих отображению таблиц People.db и Tel.db. В результате все выключатели, соответствующие полям таблиц, окажутся включенными. Это можно сделать, потому что формируется запрос на выборку значений из таблиц. Так как здесь не задаются ограничения, будут выбраны все значения.

  6. Выполним запрос командой Query|Run Query. В появившемся окне Table::Priv:ANSWER.DB будет выведен результат выполнения запроса.

  7. Сохраним запрос под именем PeopleTel командой File|Save As.

SQL-запрос.

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

На языке SQL можно создать запросы различных типов:

  • запрос на выборку данных;

  • запрос на добавление;

  • запрос на удаление;

  • запрос на обновление.

SQL-запрос, созданный с помощью DBD, помещается в файл с расширением sql.

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