VI. ЗАПРОСЫ

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

Составляя запрос, пользователь может указать в нем:

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

Запросы можно использовать для осуществления следующих операций:

- вставка новых записей;
- удаление записей;
- изменение значений;
- создание новых полей.

С помощью запроса можно также решать определенный класс математических задач.

1. МЕХАНИЗМ РАБОТЫ ЗАПРОСА

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

Предположим, имеется таблица "Клиент" с данными по клиентам. Если в ней пользователя интересуют лишь имена и адреса клиентов, то для этого ему нужно открыть окно Query и задать образец желаемой таблицы, поставив в нужных полях соответствующий знак. Результат появится во временной таблице Answer.

Paradox переписывает таблицу Answer при каждом новом запросе и уничтожает ее по окончании сеанса работы. Чтобы, при необходимости, сохранить содержимое запроса, надо присвоить таблице Answer другое имя.

2. ОКНО QUERY

Новый запрос в Paradox создается с помощью команды Fi le|New|Query. При этом открывается пустое окно Query, а по верх его - диалоговое окно Select File, в котором пользователь выбирает те файлы, по которым он хотел бы получить запрос. При этом, если выбранные в окне Select File файлы защищены паролем, то Paradox попросит ввести пароль, чтобы запрос по этому объекту был принят к исполнению.

2.1. ОБРАЗЕЦ ЗАПРОСА

После выбора нужных файлов окно Select File закроется и Paradox поместит в окно Query образцы запросов по всем объектам, находящимся в выбранных файлах. При выборе многотабличного запроса Paradox помещает в это окно образцы запро сов по всем таблицам, автоматически связывая их в соответствии со связями внутри этих многотабличных объектов.

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

При работе с образцом запроса пользователю доступны следующие операции:

- связывание таблиц с помощью элемент-примеров;

- включение поля в запрос;

- удаление операций запроса.

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

Paradox допускает следующие включения:

- значком . При этом в таблице Answer будут представ лены только уникальные значения поля, отсортированные в порядке возрастания;

- значком +. Этот значок используется при необходимости получить все значения поля, включая повторяющиеся;

- значком  - для сортировки значений в убывающем по рядке (от A до Z);

- значком G. Этот значок используется для задания группы записей в SET-запросах. Он позволяет группировать записи по значениям полей, не включая сами поля в таблицу Answer.

2.2. ИЗМЕНЕНИЕ СТРУКТУРЫ ТАБЛИЦЫ ANSWER

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

Если таблица Answer содержит поля с повторяющимися именами (из двух или более таблиц), то Paradox оставит имя первого из этих полей без изменения, а остальные назовет "имя-1", "имя-2" и т.д. Новые вычисляемые поля помещаются в конец таблицы и получают имя в соответствии с формулой, по которой производятся вычисления, если они не переименованы пользователем.

Перед тем, как начать выполнение запроса, пользователь может изменить некоторые свойства таблицы Аnswer:

- дать таблице Answer новое имя, что приводит к сохранению таблицы по окончании сеанса работы с Paradox;

- выбрать ее тип - Paradox- или dBASE-таблица;

- изменить порядок следования полей в таблице.

Также, перед выполнением запроса можно указать способ сортировки записей в таблице Answer.

3. СЕЛЕКЦИЯ ЗАПИСЕЙ

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

Условия могут накладываться для:

* вывода записей с определенным значением какого-либо поля. Для этого нужное значение просто вводится в со ответствующее поле образа запроса.

* поиска алфавитно-цифровых значений, содержащих типографические опечатки или допускающих различное написание. В этих случаях используется оператор LIKE, который ставится перед значением, которое нужно найти.

* выбора записей, не содержащих определенных значений.

Для этого используется оператор NOT. Он ставится перед теми значениями, появления которых пользователь хочет избежать. Этот оператор может ставится перед точными значениями, диапазонами, шаблонами и другими операторами.

* поиска записей, не содержащих никаких значений в определенных полях. В некоторых случаях бывает нужно найти такие записи чтобы внести в них данные. Для этих целей служит оператор BLANK.

3.1. ПОИСК ПО ШАБЛОНУ

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

* оператор @ заменяет любой символ. При задании шаблонов можно использовать любое количество таких опера торов.

* оператор .. заменяет собой последовательность символов любой длины, включая пробелы. Регистр букв при этом не имеет значения.

3.2. УСЛОВНЫЕ ОПЕРАТОРЫ

Условные операторы в Paradox - это операторы AND и OR.

Оператор AND выполняет тип действий "логическое И" и используется в тех случаях, когда, например, пользователь хочет в запросе получить записи, которые одновременно удовлетворяют всем введенным условиям. Оператор AND часто слу жит одним из основных компонентов при задании диапазона значений.

При необходимости выбора записей, удовлетворяющих одно му из двух (или нескольких) условий, можно использовать оператор Paradox OR, выполняющим действие "логическое ИЛИ".

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

4. ИСПОЛЬЗОВАНИЕ ЭЛЕМЕНТ-ПРИМЕРОВ

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

Пользователь может создавать элемент-примеры сам, либо это может сделать за него Paradox. При работе на цветном мониторе Paradox выделяет их цветом, на монохромном - подсвечивает.

5. АРИФМЕТИЧЕСКИЕ ВЫРАЖЕНИЯ В ЗАПРОСАХ

Арифметические операторы применяются для составления арифметических выражений со значениями, содержащимися в по лях запроса. Paradox допускает использование следующих арифметических операторов:

- сложение +;
- вычитание -;
- умножение *;
- деление /;
- группирующие скобки ().

В числовых полях Paradox и dBASE можно использовать любые арифметические операторы. Оператор сложения можно ис пользовать также в алфавитно-цифровых полях для слияния значений.

6. ВЫЧИСЛЕНИЯ В ЗАПРОСАХ

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

- составлять и редактировать математические выражения;;

- комбинировать значения из нескольких полей из одной или нескольких таблиц;

- комбинировать значения полей с константами;

- создавать новые поля и помещать в них вычисленные значения.

Если в запросе используется оператор CALС, в таблице Answer появляется дополнительное поле (по умолчанию - в конце таблицы), содержащее результаты вычислений. Paradox автоматически присваивает этому полю имя в соответствии с формулой, по которой производились вычисления, однако, его можно изменить с помощью оператора AS.

В условиях выбора можно определить те записи, над поля ми которых будут производится вычисления, а элемент-примерами заменить значения этих полей в формуле.
CALC-выражение может содержать:ь:

- константы;

- элемент-примеры;

- арифметические операторы.

Например, в таблице есть поля "Описание товара","Количество" и "Цена". Для того, чтобы определить стоимость каждого вида товара, нужно включить поля в запрос, в двух последних ввести элемент-пример, соответствующий названию поля и в любое поле записать CALK-выражение. В запросе выглядеть это будет так:

    T-Описание е товара-T-Количество---T--Цена----------------¬
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦

Выделенные слова - элемент-примеры.

7. ИЗМЕНЕНИЕ ТАБЛИЦ С ПОМОЩЬЮ ЗАПРОСОВ

Механизм создания запросов в Paradox дает пользователю некоторые возможности редактирования данных. В запросах можно использовать следующие зарезервированные слова:

- INSERT: вставить записи в таблицу;

- DELETE: удалить записи из таблицы;

- CHANGETO: изменить определенные значения.

7.1. INSERT-ЗАПРОС

INSERT-запрос позволяет вставлять в таблицу-приемник записи из нескольких таблиц-источников. При этом таблица-приемник и источник могут быть разных типов, например, Paradox и dBASE.

INSERТ-запрос создает в личном каталоге пользователя временную таблицу Inserted. Она переписывается при каждом выполнении запроса и удаляется по окончании сеанса работы с Paradox. Если записи, вставляемые в таблицу-приемник, конфликтуют с ее системой ссылок, или правилами проверки корректности данных (при выполнении INSERT-запроса не учитыва ется только правила соответствия данных шаблону), Paradox помещает такие записи во временную таблицу Errins. Нарушение системы ссылок может произойти, например, при попытке вставить в дочернюю таблицу запись, значение ключевого поля которой отсутствует в родительской таблице таблице.

7.2. DELETE-ЗАПРОС

DELETE-запрос применяется для удаления из таблицы определенных записей. Он удаляет только записи целиком, создает в личном каталоге пользователя таблицу Deleted, содержащую удаленные записи. Paradox поступает с ней также, как и с таблицей Inserted. Можно восстановить удаленные записи, применив INSERT-запрос с таблицей Deleted в качестве источника. Если таблица не имеет ключа, то возвращенные записи независимо от их прежних позиций будут помещены в конец таблицы. При попытке удалить записи, отсутствие которых привело бы к нарушению системы ссылок, Paradox не производит удаления, а лишь помещает копии этих записей во временную таблицу Errdel.

7.3. CHANGETO-ЗАПРОС

CHANGETO-запрос позволяет изменять значения полей в таблице, которые удовлетворяют заданным пользователем условиям. Этот запрос бывает крайне полезен при однообразном изменении большого количества значений. CHANGETO-запрос создает в личном каталоге пользователя временную таблицу Changed с исходными оригиналами записей, измененных в процессе выполнения запроса. Она также перезаписывается при каждом при каждом исполнении CHANGEТО-запроса и удаляется по окончании сеанса работы с Paradox. При попытке изменить с помощью CHANGETO-запроса значений ключевых полей (первичных или вторичных), которая привела бы к нарушению системы ссылок, Paradox помещает копии конфликтующих записей во временную таблицу Errchng в личном каталоге пользователя.

8. СЛОЖНЫЕ ЗАПРОСЫ

Используя возможности групповых запросов Рaradox, пользователь может:

- Выбирать из базы данных записи по групповым статистическим характеристикам (например, найти виды товаров, на которые поступило два и более заказов)

- Производить статистические вычисления внутри групп записей (например, вычислить средние значения сумм, на которые сделаны заказы, по каждой стране)

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

Для выполнения специальных вычислений над заданными группами записей в Paradox предусмотрены статистические операторы. Таких операторов существует пять:

- AVERAGE - усредняет значение в группе

- COUNT - вычисляет количество значений в группе

- MAX - определяет максимальное значен- MIN - определяет минимальное значение

- SUM - суммирует значения внутри группы

По умолчанию все статистические операторы кроме COUNT производят вычисления над всеми значениями в группе (COUNT по умолчанию подсчитывает только неповторяющиеся значения).

Однако, Paradox предусматривает использование модификаторов статистических операторов: - ALL - означает, что вычисления производятся над всеми значениями внутри группы, включая дублирующие - UNIQUE - означает, что статистическая операция производится только над неповторяющимися значениями Также в Paradox существует оператор ONLY, который не относится к статистическим, поскольку не производит никаких вычислений, однако, в остальном действует аналогично: он объединяет в группы записи, содержащие одно определенное значение.