Формирование списка полей результирующей таблицы запроса



Формирование списка полей результирующей таблицы запроса

В результирующей таблице запроса поля формируются на основе полей исходных таблиц и вычисляемых полей. Для задания списка полей результирующей таблицы запроса предназначена вкладка Fields (Поля) конструктора запросов (рис. 9.3).

Вкладка Fields (Поля) содержит два списка: Available fields (Имеющиеся поля) и Selected fields (Выбранные поля). Список Available fields (Имеющиеся поля) содержит все поля размещенных в окне конструктора таблиц. Selected fields (Выбранные поля) отображает поля формируемого запроса.

Перенести поля из списка Available fields (Имеющиеся поля) в Selected fields (Выбранные поля) вы можете одним из перечисленных ниже способов.

Использовать для переноса кнопки Add (Добавить) и Add All (Добавить все), позволяющие перенести в список Selected fields (Выбранные поля) выделенные или все поля, соответственно. Используя кнопку Remove (Удалить), вы можете вернуть в список Available fields (Имеющиеся поля) ошибочно перенесенные поля. Использовать механизм "перенести-и-оставить". Для этого на панели, содержащей образы используемых в запросе таблиц, выделите поля, которые вы собираетесь отобразить в запросе, нажмите кнопку мыши и, не отпуская ее. перенесите их в список Selected fields (Выбранные поля). Для выбора всех полей используется строка таблицы, содержащая звездочку. Этот же механизм можно использовать для удаления полей из списка Selected fields (Выбранные поля). Для переноса поля из списка Available fields (Имеющиеся поля) в Selected fields (Выбранные поля) вы можете дважды щелкнуть мышью на поле в образе таблицы или в списке Available fields (Имеющиеся поля).

Формирование списка условий



Формирование списка условий

Visual FoxPro позволяет при создании запросе» формировать несколько условий. В том случае, если все задаваемые условия накладываются на одно поле, их можно разместить в одной строке. В противном случае условия размещаются в разных строках вкладки Filter (Фильтр). Рассмотрим следующий пример. Выберем всех покупателей из Москвы, Новгорода и Киева. Откройте окно конструктора запросов. Поместите в него таблицу customer. На вкладке Fields (Поля) разместите в списке Selected fields (Выбранные поля) требуемые поля. Откройте вкладку Filter (Фильтр). Из списка Field Name (Имя поля), содержащего все поля таблицы Customer, выберите поле ccity. В списке Criteria (Критерии) выберите значение In (В). В поле столбца Example (Пример) через запятую задайте в кавычках названия городов, покупатели которых вас интересуют (рис. 9.13). Для просмотра результатов выборки нажмите кнопку Run (Выполнить) на стандартной панели инструментов

Запросы к базе данных



Глава 9. Запросы к базе данных

Запросы к базе данных Конструктор запросов Команды, используемые при формировании запросов Сохранение запроса Запуск запроса на выполнение Формирование списка полей результирующей таблицы запроса Вычисляемые поля запроса Вкладка Order By конструктора запросов Упорядочение по нескольким полям Задание условий для выбора записей Выбор полей, не удовлетворяющих заданному условию Выбор похожих значений Выбор записей, находящихся в заданном диапазоне значений Формирование списка условий Многотабличные запросы Выборка из четырех таблиц Группировка полей запроса Использование в запросе выражений и функций полей Включение в запрос итоговых значений Изменение наименований полей в запросе



Группировка полей запроса



Группировка полей запроса

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

Для группировки записей в запросе предназначена вкладка Group By (Группировка) (рис. 9.18), содержащая список Grouped fields (Поля группировки) с полями, по которым осуществляется группировка данных.



Использование в запросе выражений и функций полей



Использование в запросе выражений и функций полей

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

Кроме того, Visual FoxPro позволяет выполнять итоговые операции над вычисляемыми в запросе полями. Например, в запросе, выбирающем данные

из таблиц ordsaiem и ordsaied. вы можете вычислить итоговую стоимость продажи каждого товара за интересующий вас интервал времени.

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



Изменение наименований полей в запросе



Изменение наименований полей в запросе

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

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

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

В предыдущем примере наименование итогового поля было определено Visual FoxPro по умолчанию. Результат запроса будет более читабельным, если вы измените наименования полей. Для этого выполните следующие действия:

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

OrdSalem.icdorder AS Заказ

Аналогичным образом добавьте в итоговое поле вычисления итоговой стоимости заказа ключевое слово as и наименование поля Стоимость.

SUM(OrdSaled.nQuant * OrdSaled.nUnitPri.ee) AS Стоимость

Сохраните запрос. Для выполнения запроса нажмите кнопку Run (Выполнить), в результате на экране появится результирующая таблица, содержащая новые наименования полей (рис. 9.22).

Команды, используемые при формировании запросов



Команды, используемые при формировании запросов

Для работы в окне конструктора запроса можно использовать команды меню Query и панель инструментов Query Designer (Конструктор запроса). Назначение команд и кнопок на панели инструментов описано в табл. 9.2.

Конструктор запросов



Конструктор запросов

Для создания запроса в окне конструктора запросов выполните следующие действия: На вкладке Data (Данные) конструктора проекта выберите группу Queries (Запросы). Нажмите кнопку New (Новый). В открывшемся диалоговом окне New Query (Новый запрос) нажмите кнопку New Query (Новый запрос). Открывается диалоговое окно выбора таблиц Add Table or View (Добавить таблицу или представление данных). В этом диалоговом окне выберите таблицы, данные из которых хотите использовать в запросе, и с помощью кнопки Add (Добавить) перенесите их в окно конструктора запросов. Завершив выбор таблиц, нажмите кнопку Close (Закрыть).

На экране появляется окно конструктора запросов (рис. 9.2). которое содержит названия выбранных таблиц, а в основном меню появляется пункт Query (Запрос). Можно приступать к формированию условий запроса.

Совет
Совет

Для открытия ранее созданного запроса в окне конструктора запросов на вкладке Data (Данные) окна проекта в группе Queries (Запросы) найдите модифицируемый запрос, установите на него курсор и нажмите кнопку Modify (Модифицировать).



Многотабличные запросы



Многотабличные запросы

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

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



Ввод условия выборки в мастере запросов



Рис. 9.1. Ввод условия выборки в мастере запросов


С помошыо констр\ктора запросов Visual FoxPro вы можете формировать различной сложности критерии для выбора записей из одной пли нескольких таблиц, указывая при этом, какие поля лолжны быть отображены в запросе. Нал полями, выбираемыми из таблиц с помощью запросов, можно выполнять различные вычисления.

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

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





Окно конструктора запросов с выбранной таблицей клиентов



Рис. 9.2. Окно конструктора запросов с выбранной таблицей клиентов


Далее, открывая в конструкторе запросов необходимые вкладки, вы выполняете следующие действия:

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

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



Вкладка Fields предназначена для выбора полей запроса



Рис. 9.3. Вкладка Fields предназначена для выбора полей запроса


Совет
Совет

Как и при работе с объектами в Windows, для выделения группы полей вы можете использовать мышь совместно с клавишами <Shift> и <Ctrl>. Сначала выделите первое из выбираемых полей и нажмите клавишу <Shift> или <Ctrl> в зависимости от того, расположены выбираемые поля рядом или вразброс. Затем, не отпуская клавишу, щелкните мышью крайнее поле из группы подряд выбираемых полей или каждое из отдельно расположенных полей.

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





Определение вычисляемого поля



Рис. 9.4. Определение вычисляемого поля




Результат выборки



Рис. 9.5. Результат выборки


На этом формирование запроса завершено (рис. 9.4). Нажмите кнопку Run (Выполнить) на стандартной панели инструментов, и на экране появится результирующая таблица (рис. У.5).



Вкладка Order By конструктора позволяет сформировать условия упорядочения данных в запросе



Рис. 9.6. Вкладка Order By конструктора позволяет сформировать условия упорядочения данных в запросе


В списке Ordering criteria (Критерии упорядочения) с левой стороны поля, для которого установлена опция Ascending (По возрастанию), расположена направленная вверх стрелка. Для обозначения упорядочения по убыванию используется стрелка, направленная вниз.

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

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

Откройте окно конструктора запросов. В открывшемся диалоговом окне Add Table or View (Добавить таблицу или представление) выберите таблицу customer. На вкладке Fields (Поля) перенесите в список Selected fields (Выбранные поля) поля cCompany и cCity.

Рис. 9.7. Результаты выборки запроса

Откройте вкладку Order By (Упорядочение). Дважды щелкнув на поле ccity, перенесите его в список Ordering criteria (Критерии упорядочения). По умолчанию для него установлена опция Ascending, т. е. данные будут упорядочены в алфавитном порядке по возрастанию. Нажмите кнопку Run (Выполнить) на стандартной панели инструментов и просмотрите результаты выполненного запроса (рис. 9.7).



Использование запроса для упорядочения двух полей



Рис. 9.8. Использование запроса для упорядочения двух полей


В окне конструктора запросов перейдите на вкладку Order By (Упорядочение). В списке Ordering criteria (Критерии упорядочения) находите поле ccity, по значению которого были упорядочены данные в предыдущем запросе. Выделите поле yCreditLimit и дважды щелкните его мышью. Поле будет перенесено в список Ordering criteria (Критерии упорядочения). Установите для данного поля опцию Descending (По убыванию). Обратите внимание, как выглядит теперь окно конструктора запросов (рис. 9.8). В списке Ordering criteria (Критерии упорядочения) рядом с полем ccity расположена стрелка, направленная вверх, а рядом с полем yCreditLimit — стрелка, направленная вниз. Направленная вверх стрелка означает, что данные отображаются в порядке возрастания, а направленная вниз — что данные расположены в порядке убывания.



Задание условия точного совпадения значения одного поля



Рис. 9.9. Задание условия точного совпадения значения одного поля




Задание условия для выбора полой, не удовлетворяющих определенному критерию



Рис. 9.10. Задание условия для выбора полой, не удовлетворяющих определенному критерию




Задание условия неточного совпадения



Рис. 9.11. Задание условия неточного совпадения




Для задания условия на вкладке Filter (Фильтр) выберите поле clasName. В списке вариантов сравнения выберите значение =. В поле столбца Example (Образец) введите Ник (рис. 9.И). В результате выполнения запроса Visual FoxPro отобразит в результирующей таблице записи о фирмах, имеющих представителей с фамилиями Николаев и Никифоров.



Выбор записей по диапазону значений поля дат



Рис. 9.12. Выбор записей по диапазону значений поля дат


Просмотрите данные в появившейся на экране результирующей таблице. Она содержит информацию о всех продажах за указанный в запросе интервал времени.

Замечание
Замечание

При задании условий для выбора записей по диапазону значений можно использовать не только числовые поля, но и текстовые. В этом случае при выполнении запроса Visual FoxPro сравнивает коды символьных величин. Например, условие выбора "Л, М", помещенное в поле Example (Образец) для поля ccompany, позволит выбрать из таблицы Customer список предприятий, названия которых начинаются на буквы Л и М.



Окно запроса со списком условий отбора



Рис. 9.13. Окно запроса со списком условий отбора




Вкладка Join содержит условия объединения таблиц



Рис. 9.14. Вкладка Join содержит условия объединения таблиц


Если таблица, добавляемая в конструктор запросов, не имеет установленных в базе данных связей с уже размещенными в конструкторе таблицами, на экране открывается диалоговое окно Join Condition (Условие объединения) (рис. 9.15), в котором необходимо задать условие объединения двух таблиц.



Определение условия объединения таблиц в диалоговом окне Join Condition



Рис. 9.15. Определение условия объединения таблиц в диалоговом окне Join Condition


В верхней части диалогового окна Join Condition (Условие объединения) размещены два раскрывающихся списка, содержащие поля, которые можно использовать для объединения таблиц. Ниже расположен переключатель Type of join (Тип объединения), содержащий опции, определяющие тип создаваемой между таблицами связи. Назначение опций описано в табл. 9.3.



Вкладка Join окна запроса для выборки из четырех таблиц



Рис. 9.16. Вкладка Join окна запроса для выборки из четырех таблиц




Результаты запроса для выборки из четырех таблиц



Рис. 9.17. Результаты запроса для выборки из четырех таблиц




Вкладка Group By окна конструктора запросов



Рис. 9.18. Вкладка Group By окна конструктора запросов




Диалоговое окно Expression Builder позволяет включить в запрос функцию или выражение



Рис. 9.19. Диалоговое окно Expression Builder позволяет включить в запрос функцию или выражение


При нажатии кнопки Options (Опции) открывается диалоговое окно Expression Builder Options (Опции построителя выражения) (рис. 9.20). Используя параметры этого окна, можно настроить список наиболее часто используемых в запросе функций, отображаемых в области Functions (Функции) диалогового окна Expression Builder (Построитель выражения).



Диалоговое окно Expression Builder Options



Рис. 9.20. Диалоговое окно Expression Builder Options


Чтобы настроить список функций, выполните следующие действия:

В диалоговом окне Expression Builder Options (Опции построителя выражений) установите опцию типа настраиваемой функции. Нажмите кнопку Clear (Очистить) для очистки списка функций. Используя клавишу <Shift>, если выбираемые функции расположены подряд в списке, или клавишу <Ctrl>, выберите необходимые функции. Нажмите кнопку ОК.

В нижней части диалогового окна Expression Builder Options (Опции построителя выражений) находится переключатель, содержащий опции, описанные в табл. 9.5.



Результат выборки



Рис. 9.21. Результат выборки




Изменение наименования полей



Рис. 9.22. Изменение наименования полей




Сохранение запроса



Сохранение запроса

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

Для сохранения условий выборки в меню File (Файл) выберите команду Save as (Сохранить как). В открывшемся диалоговом окне Save As (Сохранить как) откройте папку, в которой хотите сохранить файл, введите в поле ввода имя файла и нажмите кнопку Сохранить.

В окне проекта запросы размещаются в разделе Queries (Запросы) вкладки Data (Данные). Для открытия запроса необходимо установить на него курсор и нажать кнопку Modify (Модифицировать) окна проекта.





Назначение вкладок окна конструктора запросов



Таблица 9.1. Назначение вкладок окна конструктора запросов

Вкладка Назначение
Fields (Поля) Позволяет указать поля исходных таблиц, выбираемые в результирующий запрос
Join (Объединение) Позволяет задать условия объединения таблиц
Filter (Фильтр) Позволяет определить фильтры, накладываемые для выбора записей
Order By (Упорядочение) Позволяет задать критерии упорядочения данных
Group By (Группировка)

Позволяет задать условия группировки данных
Miscellaneous (Разное)

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




Назначение опций диалогового окна Join Condition



Таблица 9.3. Назначение опций диалогового окна Join Condition

Опция Тип создаваемой связи
Inner join (Внутреннее объединение) Создает объединение, в котором выбираются только те записи, которые содержат совпадающие значения в полях связи
Left join (Объединение слева) Создает объединение, в котором выбираются все записи из левой таблицы, а также записи из правой таблицы, значения поля связи которого совпадают со значениями поля связи левой таблицы
Right join (Объединение справа) Создает объединение, в котором выбираются все записи из правой таблицы, а также записи из левой таблицы, значения поля связи которого совпадают со значениями поля связи правой таблицы
Full join (Полное объединение) Создает объединение, в котором выбираются все записи из правой и левой таблиц

Замечание
Замечание

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

Замечание
Замечание

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

Установленные между таблицами условия объединения можно изменять. Для этого необходимо использовать вкладку Join (Объединение) конструктора запросов.

Совет
Совет

Для установления связи между таблицами в конструкторе запросов, как и в базе данных, можно использовать механизм "перенести-и-оставить". Выберите поле одной из таблиц, нажмите кнопку мыши и, удерживая нажатой, перенесите поле на связываемое поле в другой таблице. После этого откройте вкладку Join (Объединение) и отредактируйте запись с установленным условием объединения таблиц.





Функции для вычисления итоговых значений в запросе



Таблица 9.4. Функции для вычисления итоговых значений в запросе

Функция Результат вычисления
COUNT( ) Количество строк в итоговой таблице
МАХ Наибольшее значение в столбце
MIN Наименьшее значение в столбце
AVG( ) Среднее значение столбца численных данных
SUM( ) Сумма численных данных столбца

Для формирования в запросе выражения предназначено поле Functions and expressions (Функции и выражения) вкладки Fields (Поля) и расположенная справа от него кнопка открытия построителя выражения. Нажмите данную кнопку. Откроется диалоговое окно Expression Builder (Построитель выражения). В поле ввода Expression (Выражение) сформируйте итоговое значение (рис. 9.19), используя поля таблиц запроса, расположенные в списке Fields (Поля), и функции области Functions (Функции), сгруппированные по типам данных и представленные в виде четырех списков.



Назначение опций переключателя окна Expression Builder Options



Таблица 9.5. Назначение опций переключателя окна Expression Builder Options

Опция Назначение
Always add alias (Всегда добавлять псевдоним) Указывает, что имя таблицы или представления данных всегда включается в имя поля
Add non-selected alias only (Добавлять только не выбранные псевдонимы) Если открыто более одной таблицы или представления данных, Visual FoxPro включает имя таблицы или представления данных только в том случае, если они не содержатся в списке псевдонимов в окне Data Session
Never add alias (He добавлять псевдоним) Указывает, что имя таблицы или представления данных никогда не включается в имя поля

Флажок Show system memory variables (Показывать системные переменные) указывает, будут ли отображаться в окне построителя выражения системные переменные.

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



Арифметические операторы, используемые при формировании выражений



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

Оператор Функция
+ Сложение
- Вычитание
* Умножение
/ Деление

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





Таблица customer содержит информацию...



Таблица customer содержит информацию о клиентах, таблица ordsalem - сведения о заказе на товары, таблица ordsaled - сведения о товарах, входящих в заказ (количество купленных товаров и цена товара), а таблица Goods — наименования всех товаров. При создании базы данных между этими таблицами уже были определены постоянные отношения.

Откройте новое окно конструктора запросов. Добавьте в конструктор запросов таблицы Customer, Ordsalem, Ordsaled и Goods. Между этими таблицами в базе данных установлены постоянные отношения. После их перенесения в запрос в окне конструктора запросов отобразятся установленные между таблицами связи, а на вкладку Join (Объединение) добавятся три строки с условиями объединения таблиц (рис. 9.16). В список Selected fields (Выбранные поля) вкладки Fields (Поля) перенесите фамилию клиента, номер заказа, наименование товара и количество заказанного им товара. Нажмите кнопку Run (Выполнить), и на экране появится результирующая таблица (рис. 9.17), содержащая информацию о заказах всех клиентов.

Упорядочение по нескольким полям



Упорядочение по нескольким полям

Теперь рассмотрим ситуацию, когда необходимо упорядочить данные по нескольким полям. В этом примере отобразим данные в результирующей таблице по городам клиентов в алфавитном порядке и по убыванию значений кредита. При формировании запроса воспользуемся запросом, созданным в предыдущем примере. На вкладке Fields (Поля) добавьте в список Selected fields (Выбранные поля) Поле yCreditLimit.

Вкладка Order By конструктора запросов



Вкладка Order By конструктора запросов

Вкладка Order By (Упорядочение) конструктора запросов (рис. 9.6) позволяет указать критерий упорядочения данных в результирующей таблице, используя одно или несколько полей исходной таблицы, перенесенных из списка Selected fields (Выбранные поля) в список Ordering criteria (Критерии упорядочения). Для каждого поля в списке Ordering criteria (Критерии упорядочения) вы можете указать критерии упорядочения, используя следующие опции переключателя Order options (Опции упорядочения):

Ascending — по возрастанию Descending — по убыванию

Включение в запрос итоговых значений



Включение в запрос итоговых значений

В данном примере создадим запрос для таблиц ordsaiem и ordsaied об итоговой сумме по каждому заказу. Для этого: Откройте окно запроса для таблиц Ordsaiem и Ordsaied. На вкладке Fields (Поля) перенесите в список Selected fields (Выбранные поля) поле icdorder, содержащее код заказа. Чтобы вычислить стоимость проданного товара по текущему заказу, воспользуйтесь функцией sum. Для этого нажмите кнопку открытия диалогового окна Expression Builder (Построитель выражения) поля Functions and expressions (Функции и выражения). В поле ввода Expression (Выражение) открывшегося диалогового окна введите выражение, по которому стоимость каждого проданного товара будет просуммирована и помещена в соответствующее поле результирующей таблицы:

SUM(Ordsaied.nQuant * Ordsaied.nUnitPrice)

Нажмите кнопку OK для закрытия диалогового окна Expression Builder (Построитель выражения). Для перемещения сформированного выражения в список Selected fields (Выбранные поля) нажмите кнопку Add (Добавить). Для группировки записей результирующей таблицы по полю icdorder откройте вкладку Group By (Группировка) и перенесите поле icdorder в список Grouped fields (Поля группировки). Сохраните запрос. Для выполнения запроса нажмите кнопку Run (Выполнить). На экране появится результирующая таблица, содержащая информацию об итоговой стоимости товаров по каждому заказу (рис. 9.21).

Выбор похожих значений



Выбор похожих значений

Список вариантов сравнения Criteria (Критерий) вкладки Filter (Фильтр) содержит значения, позволяющие задавать различные критерии выбираемых в результирующую таблицу записей. При работе с большими таблицами время от времени возникает необходимость найти записи, точное написание которых вы не знаете. Например, вы не знаете, верхний или нижний регистр был использован при вводе записей. В этом случае вы можете осуществить выбор записей по условию неточного совпадения значений.

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

Откройте окно конструктора запросов. Поместите в него таблицу customer. На вкладке Fields (Поля) выделите курсором поля, которые хотите отобразить в запросе, и с помощью кнопки Add (Добавить) перенесите их в список Selected fields (Выбранные поля).

Выбор полей, не удовлетворяющих заданному условию



Выбор полей, не удовлетворяющих заданному условию

Флажок Not (He), расположенный на вкладке Filter (Фильтр) окна конструктора запросов, позволяет выбрать из таблицы записи, не удовлетворяющие заданному условию. Например, в предыдущем примере мы осуществляли выбор клиентов, проживающих в Москве. Если в дополнение к заданному условию выборки мы установим флажок Not (He), то в результирующей таблице получим список клиентов, не проживающих в Москве.

В данном примере выберем из таблицы Customer все записи, за исключением записей со значением Казахстан в поле cccuntry.

Откройте запрос, созданный в предыдущем примере. Перейдите на вкладку Filter (Фильтр). В столбце Field Name (Имя поля) выберите из раскрывающегося списка поле ccountry. Щелкните мышью в поле Not (He), установив тем самым флажок. В списке вариантов сравнения Criteria (Критерий) выберите значение В текстовом поле столбца Example (Образец) введите Казахстан (рис. 9.10). Для выполнения запроса нажмите кнопку Run (Выполнить). На экране появится результирующая таблица, которая содержит записи о клиентах, проживающих вне Казахстана.

Выбор записей, находящихся в заданном диапазоне значений



Выбор записей, находящихся в заданном диапазоне значений

Для выбора записей, лежащих в заданном диапазоне значений, используются операторы > (больше), < (меньше) и Between (Между) из списка Criteria (Критерий) вкладки Filter (Фильтр). Операторы > (больше) и < (меньше) используются в том случае, если задана только нижняя или верхняя граница диапазона, a Between (Между) — когда известны обе границы. Предположим, что вам потребовался список заказов, итоговая сумма которых превышает 10 000 рублей. В другом случае вам нужно получить сведения о клиентах, воспользовавшихся услугами вашей фирмы в определенный интервал времени. В обоих случаях необходимо выбрать из таблицы записи, попадающие в диапазон значений.

Создадим запрос, формирующий список заказов, итоговая сумма которых превышает 10 000 рублей. Для этого:

Откройте новое окно конструктора запросов. Добавьте в него таблицу ordsaiem. В списке Selected fields (Выбранные поля) вкладки Fields (Поля) разместите поля с номером заказа, датой и итоговой суммой по заказу. Для задания условия отбора на вкладке Filter (Фильтр) выберите поле nSumdoc. В списке Criteria (Критерий) выберите оператор >. В текстовом поле столбца Example (Пример) введите 10000 Нажмите кнопку Run (Выполнить) на стандартной панели инструментов.

На экране появляется результирующая таблица, содержащая заказы, итоговая сумма по которым превышает 10 000 рублей.

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

Откройте запрос, созданный в предыдущем примере. На вкладке Filter (Фильтр) из списка Field Name (Имя поля) выберите поле dDoc, содержащее дату заказа. В списке Criteria (Критерий) выберите значение Between (Между). В поле Example (Образец) введите начальную и конечную даты интервала (рис. 9.12) в следующем виде:

CTOD("01.04.2003") AND CTOD("15.04.2003")
Нажмите кнопку Run (Выполнить) на стандартной панели инструментов.

Выборка из четырех таблиц



Выборка из четырех таблиц

Рассмотрим пример выборки товаров, приобретенных клиентами. Для решения этой Задачи нам Потребуются таблицы Customer, Ordsalem, Ordsaled и Goods.

Вычисляемые поля запроса



Вычисляемые поля запроса

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

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

Для формирования выражения предназначено поле Functions and expressions (Функции и выражения) вкладки Fields (Поля). Нажмите расположенную справа от поля кнопку вызова построителя выражения и в диалоговом окне Expression Builder (Построитель выражения) создайте выражение для вычисляемого поля. После того как выражение в поле Functions and expressions (Функции и выражения) сформировано, нажатием кнопки Add (Добавить) перенесите его в список Selected fields (Выбранные поля).

Замечание
Замечание

В окне Expression Builder (Построитель выражения) при создании выражения вы можете использовать поля исходных таблиц, константы, функции. Используя круглые скобки, можно изменить порядок вычисления или сгруппировать данные.

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

Откройте окно запроса для таблицы customer. На вкладке Fields (Поля) перенесите в список Selected fields (Выбранные поля) поле ccompany, содержащее наименование предприятия. Для объединения города и адреса клиента нажмите кнопку вызова построителя выражения поля Functions and expressions (Функции и выражения) и в диалоговом окне Expression Builder (Построитель выражений) создайте следующее выражение:

ALLTRIM(cCity)+ ", " +ALLTRIM(cAddress)
Закройте окно построителя выражения, нажав кнопку ОК. Для размещения созданного выражения в списке Selected fields (Выбранные поля) нажмите кнопку Add (Добавить).

Задание условий для выбора записей



Задание условий для выбора записей

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

Для формирования условий выбора определенных записей предназначена вкладка Filter (Фильтр) конструктора запросов.

Задание условия точного совпадения значений одного поля



Задание условия точного совпадения значений одного поля

На практике часто требуется выбрать из таблицы запись или группу записей, одно из полей которых содержит заданную величину. Например, вам требуется список всех клиентов, живущих в Москве. В этом случае необходимо на вкладке Filter (Фильтр) ввести требуемые значения в соответствующих полях, создав тем самым шаблон, с которым, прежде чем помешать записи в результирующую таблицу, Visual FoxPro будет сравнивать все записи исходной таблицы.

В этом примере выберем данные о клиентах из Москвы. Для этого:

Откройте окно конструктора запросов. Поместите в него таблицу customer. На вкладке Fields (Поля) перенесите в список Selected fields (Выбранные поля) наименование предприятия. Перейдите на вкладку Filter (Фильтр) конструктора запросов. В столбце Field Name (Имя поля) нажмите кнопку раскрытия списка и из всех полей исходной таблицы выберите cCity.. В списке Criteria (Критерии) выберите значение ==. В поле Example (Образец) введите Москва (рис. 9.9). Для выполнения запроса нажмите кнопку Run (Выполнить). На экране появится результирующая таблица, которая содержит записи о клиентах, чьи фирмы расположены в Москве.

Запросы к базе данных



Запросы к базе данных

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

Например, вам необходимо выбрать из таблиц информацию о клиентах, проживающих в Москве и Московской области, или сформировать список клиентов, купивших в последний месяц товаров на сумму свыше 5 000 рублей, и упорядочить их в алфавитном порядке по полю, содержащему фамилии клиентов. Для решения таких задач предназначен конструктор запросов и команда select языка Visual FoxPro.



Запуск запроса на выполнение



Запуск запроса на выполнение

После задания условий для выбора записей и указания результирующих полей в окне конструктора вы можете просмотреть результаты выполнения запроса. Для этою выполните одно из следующих действий: нажмите кнопку Run (Выполнить) на стандартной панели инструментов; выберите команду контекстного меню Run Query (Выполнить запрос); выберите в меню Query (Запрос) команду Run Query (Выполнить запрос); нажмите комбинацию клавиш <Orl>+<Q>.

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

Для-просмотра результатов запроса, не открытого в окне конструктора запросов, необходимо в окне проекта установить курсор на имя запроса и нажать кнопку Run (Выполнить).