Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Хомоненко А.Д., Цыганков В.М., Мальцев М.Г. - Базы данных. Учебник для высших учебных заведений (6-е изд.) - 2009

.pdf
Скачиваний:
4969
Добавлен:
14.05.2016
Размер:
14.64 Mб
Скачать

12. СУБД Visual FoxPro 8.0

4 6 3

После того как определена таблица (одна или несколько) для формирования запроса в диалоговом окне Конструктора необходимо:

выбрать поля, содержащие искомые данные;

задать критерии выборки, упорядочения и группировки данных;

указать, куда выводится результат запроса.

Дл я решения перечисленных задач Конструктор содержит: панель для ото-

бражения таблиц, используемых в запросе (в рассматриваемом примере на ней находится одна таблица T_PREP), и вкладки (табл. 12.10).

Таблица 12.10

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

В к л а д ка

Fields

 

Join

 

Filter

 

O r d e r

By

G r o u p

By

M i s c e l l a n e o u s

Назначение В ы б о р к а п о л е й в р е з у л ь т и р у ю щ у ю т а б л и ц у З а д а н и е у с л о в и й о б ъ е д и н е н и я т а б л и ц

З а д а н и е ф и л ь т р а ( у с л о в и й о т б о р а з а п и с е й ) З а д а н и е к р и т е р и я у п о р я д о ч и в а н и я З а д а н и е у с л о в и й г р у п п и р о в к и д а н н ы х

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

Поле Functions and expressions (функции и выражения) используется для включения в запрос функции или выражения.

По окончании формирования запроса в диалоговом окне Конструктора результат выполнения запроса можно оценить выполнив команду Query | Run Query (Запрос | выполнить запрос) системного меню.

Для повторного выполнения запроса, сформированного в окне Конструктора, его необходимо сохранить. Для этого достаточно выполнить команду File | Save (Файл | сохранить) и в открывшемся окне указать полное имя файла, в котором будет сохранено окно с описанием запроса. В результате будет созда! i файл, хранящий запрос, с расширением QPR. Теперь для повторного выполнения запроса достаточно открыть этот файл командой File | Open (Файл | открыть) и запустить

на выполнение командой Query

| Run Query (Запрос | выполнить запрос).

Выбор полей

результирующей

таблицы

Выбор полей результирующей таблицы выполняется с помощью вкладки Fields (Поля) диалогового окна Конструктора запросов. Рассмотрим эту процедуру на примере организации запроса 1.

464 Часть 3. Современные СУБД и их применение

Запрос 1. Составить список всех преподавателей, сведения о которых содержатся в таблице TPREP.DBF, с указанием их стажа и должности.

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

Поля результирующей таблицы формируются из полей исходной таблицы и вычисляемых полей. Для выбора полей исходной таблицы необходимо отобразить их в списке Selected Output (выбранные поля) вкладки выбора полей Fields (поля) (рис. 12.7). Один из способов формирования полей в результирующей таблице состоит в следующем. В окне Конструктора запросов выберем вкладку Fields (поля) и откроем при этом два списка: Available Fields (доступные поля) и Selected Output (выбранные поля) (рис. 12.7). Наша задача перенести в список Selected Output поля, используемые в запросе. При выделении в списке Available Fields (доступные поля) с помощью мыши нужного поля активизируется кнопка Add (добавить), при нажатии которой и осуществляется перенос этого поля. Для переноса всех полей в список выбранных достаточно нажать кнопку Add All (добавить все). Если часть полей оказалась лишней, их можно удалить из списка Selected Output (выбранные поля) с помощью кнопки Remove (удалить).

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

Результаты выполнения запроса представлены на рис. 12.8.

Ш\ Query

 

 

И И Е З :

Fio

Stag

Dolgn

Kaf

 

 

5| преп

251

Петров П.П.

 

7 треп

25!

Сидоров С.С.

i

10iдоценг

25!

Егоров Е.Е.

 

12; профессор

25! .

Баглюк С.И.

 

12;сг, преп

2 4 d

 

 

 

Рис. 12.8. Результат выборки полей таблицы Т ргер

Рассмотрим процедуру упорядочения

данных в таблице на примере следу-

ющего запроса.

Запрос 2. Составить список всех преподавателей из таблицы T PREP.DBF с указанием их стажа и должности. Фамилии в списке упорядочить по алфавиту.

Для упорядочения данных используется вкладка Order By (упорядочение). В ней содержится два списка Selected Fields (выбранные поля) и

12. СУБД Visual FoxPro 8.0

465

Ordering Criteria (критерий упорядочения). Для задания критерия упорядочивания необходимо перенести в Ordering Criteria (критерий упорядочения) поля, которые будут определять порядок расположения выводимых в запросе данных. Процедура переноса аналогична рассмотренной при определении полей результирующей таблицы. Для реализации нашего первого запроса во вкладке Order By (упорядочение) выделим курсором поле T_prep.fio (поле fio таблицы Т р г е р ) и, нажав кнопку Add (добавить), перенесем его в список Ordering Criteria (критерий упорядочения).

С помощью переключателя Order Options (параметры упорядочения)

для каждого выбранного поля можно установить критерий упорядочивания по возрастанию (Ascending) или по убыванию (Descending). Выберем критерий Ascending (возрастающий). Результат выполнения подготовленного описанным образом запроса будет аналогичен представленному на рисунке 12.8, но фамилии преподавателей будут следовать в алфавитном порядке.

Фильтрация записей

До сих пор в качестве результата запроса мы получали все записи исходной таблицы. Чаще возникает необходимость в просмотре части записей таблицы, удовлетворяющих определенным условиям. Процедуру отбора записей, отвечающих определенному условию, называют процедурой фильтрации записей. Для ее выполнения используется вкладка Filter (фильтр) Конструктора запроса. Рассмотрим эту процедуру на примере следующего запроса.

Запрос 3. Выполнить запрос, аналогичный запросу 2, но сформировать список сведений только о преподавателях 25 кафедры.

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

Для задания условия фильтрации записей выберем вкладку Filter (фильтр). Из раскрывающегося списка полей исходной таблицы в столбце Field Name (имя поля) выберем поле T prep.kaf для отбора. В списке Criteria (критерий) выберем оператор точного сравнения (= =). Далее зададим значение поля kaf, по которому осуществляется сравнение. Для этого в поле Example (пример) введем 25. Рассматриваемый в примере запрос готов к выполнению.

В раскрывающемся списке Criteria (критерий) содержатся следующие операторы сравнения:

=— равенство, Like — вхождение,

== — фактическое равенство,

>— больше чем,

<— меньше чем,

466

Часть 3. Современные СУБД и их применение

>= — не меньше чем, <= — не больше чем,

Is NULL — совпадение с NULL, Between — в диапазоне значений, In — среди заданных значений.

Оператор = (Equal) позволяет осуществлять поиск при условии знания части первых символов в значениях поля, по которому осуществляется поиск. Эта часть символов вводится в поле столбца Example (пример) и сравнивается со значением поля, указанного в столбце Field Name (имя поля).

Оператор Like (подобие) выполняет посимвольное сравнение строки, стоящей слева, со строкой, находящейся справа, пока она не закончится.

Операторы >, >=, <, <= и Between (между) можно использовать с текстовыми, цифровыми полями и полями дат. Например, для выборки преподавателей со стажем более 10 лет, достаточно в качестве условий отбора выбрать поле Stag, в списке вариантов сравнения выбрать оператор >=, а в поле Example (пример) ввести 10.

При использовании оператора Between (между) начальное и конечное значение вводится через запятую. При задании диапазона для значений текстовых полей сравниваются коды символьных величин. Так, условие выбора «А, Д», помещенное в поле Example (пример) применительно к полю Fio позволит выбрать из таблицы Т Ргер всех тех преподавателей, фамилии которых начинаются с букв в данном диапазоне.

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

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

Возможно формирование критерия отбора записей, состоящего из нескольких условий, соединяемыми операторами AND (И) или OR (ИЛИ) из списка

Logical.

Кнопки Insert (вставить) и Remove (удалить) соответственно добавляют и удаляют условия из списка условий отбора записей. Чтобы вставить новое условие между существующими условиями, необходимо выделить нижнее из них и нажать кнопку Insert (вставить). В этом случае будет добавлена пустая строка перед помеченной.

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

<Expression...> (<выражение...>) в списке Field Name (имя поля).

12. СУБД Visual FoxPro 8.0

467

Организация многотабличных запросов

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

Рассмотрим создание многотабличного запроса на следующем примере.

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

Требуемая информация содержится в следующих трех таблицах: Тргер, T dolgn, T stag. В окне Конструктора запросов уже имеется таблица Т ргер. Остальные можно добавить, например, с помощью команды Query | Add Table (запрос | добавить таблицу). При этом в появившемся диалоговом окне Add Table or View (добавить таблицу или запрос) выбирается требуемая таблица. В результате образ таблицы появляется в окне Конструктора запросов.

Если при создании БД между выбранными таблицами были установлены постоянные связи, то они будут также представлены, во-первых, в виде линий, соединяющих соответствующие поля в образах этих таблиц (верхняя часть рис. 12.9), а во-вторых — во вкладке Join добавятся соответствующие строки с условиями объединения таблиц.

 

 

 

dolgn

 

 

 

 

oklad

 

 

 

 

 

i£2

Fields Join

| Filter | Older By |

Group By | Miscellaneous

j

 

Type

Field Name

Not Criteria

Value

Logical

 

 

 

T_prep.stag

 

 

|| T_prep.dolgn

 

T_dolgn. dolgn

 

insert Remove

Рис. 12.9. Окно многотабличного запроса с выбранной вкладкой Join

4 6 8

Часть 3. Современные СУБД и их применение

Если ранее постоянных связей между выбранными таблицами установлено не было, то открывается диалоговое окно Join Condition (условие связи), служащее для установления или модификации связи (рис. 12.10). В связи с тем, что в рассматриваемом примере имеются постоянные связи между выбранными таблицами, то окно Join Condition (условие связи) было вызвано двойным щелчком мыши на выбранной линии, связывающей таблицы по полю dolgn. Этот прием используется также при модификации типа связи.

,,' Join Condition

 

 

 

 

T_prep. dolgn

 

 

T_dolgn. dolgn

- Type of join

-

- •••

 

-

(• Inner join

 

С Left join

С flight join

С Full join

• Description-

 

 

 

..

Create a result set that includes only the T_prep records that match

T_dolgn records.

OK J Cancel

Рис. 12.10. Окно Join Condition

Тип связи модифицируется или задается с помощью переключателя Туре of join (тип связи) рассматриваемого окна. В левой и правой частях окна содержатся раскрывающиеся списки полей двух таблиц, с помощью которых выбираются поля для связи таблиц. Будем использовать предлагаемую по умолчанию опцию Inner join. В этом случае создается объединение, в которое выбираются записи, которые содержат совпадающие значения в полях связи.

Замечание.

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

Формирование вычисляемого поля в запросе

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

12. СУБД Visual FoxPro 8.0

469

and Expressions (функция и выражения) (рис. 12.1) ввести необходимое выражение. Далее после нажатия кнопки Add (добавить) данное выражение будет занесено в список полей запроса.

Если нажать кнопку справа от поля Function and Expressions (функция и выражения), то открывается диалоговое окно Построителя выражения — Expression Builder (рис. 12.11), упрощающего формирование выражения. Выбирая в поле From table (из таблицы) Построителя таблицу и в поле Fields (поля) — название поля, формируем требуемое выражение, которое при этом выводится в поле Expression (выражение). По нажатию кнопки ОК вычисляемое поле переносится в список полей запроса.

Expression

Builder

 

 

 

Expression:

 

 

и

 

T_prep. dolgn +

T_stag.d_stag

OK

 

 

 

d

Cancel

г Functions

 

 

 

Verify

' String:

 

Math:

 

3

 

 

j "text"

p

 

Qptions.

logical:

 

Hate:

~3

 

||0

 

 

 

| Wate}

 

rields:

 

Vajiables:

Ma]

 

 

 

 

 

 

 

box

L T J

 

 

 

indent

N

 

 

 

Jmargin

N

 

 

 

_padvance

С

 

 

 

_pageno

N

 

From table: J T_stag

_pbpage

N

 

_pcolno

N j j

 

 

 

 

 

 

 

 

Рис. 12.11. Диалоговое окно Expression

Builder

Результат выполнения многотабличного запроса с вычисляемым полем (Ехр_7) представлен на рис. 12.12.

±

Ж

Fio

Kaf

Dolgn

| Slag |D _ *lag|Oklad|

Екр_7

Иванов И И.

 

251

5]

50

1000!

1050

Петров П.П.

 

25;преп

7

50

1000!

1050

Сидоров С. С.

 

25•доцент

юФ

100

2000{

2100

Егоров Е.Е.

 

25; профессор

12°

150

2500!

2650

Рис. 12.12. Результат выполнения многотабличного запроса

470

Часть 3. Современные СУБД и их применение

Из рисунка 12.12 видно, что вычисляемому полю автоматически был присвоен заголовок (Ехр_7), который не очень содержателен. Есть возможность изменять заголовки полей в запросе. Для этого в поле Function and Expressions (функция и выражения) Конструктора запроса к названию формируемого ноля добавляется ключевое слово AS и новый заголовок.

Сохраним результаты запроса в файле Query4.QPR.

Примеры сложного упорядочения данных

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

Запрос 5. Организовать выборку сведений о преподавателях со стажем работы от 5 до 10 лет. Сведения упорядочить по виду занятия и фамилии преподавателя.

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

чить выбранные сведения сначала по видам занятий, а затем по фамилии преподавателя. Для этого во вкладке Order By (упорядочение) в список Ordering Criteria (критерий упорядочения) необходимо занести сначала поле VidZan, а затем Fio. Для задания выборки по заданному диапазону преподавательского стажа укажем во вкладке Filter его нижнюю (5 лет) и верхнюю (10 лет) границы.

Подготовим запрос следующим образом.

1.Создадим новый запрос с помощью команды File | New (файл | создать).

2.Добавим в окно Конструктора запроса все таблицы БД.

3.На вкладке Fields (поля) занесем в список Selected fields (выбранные

поля) выбираемые поля: T Prep.Fio, T P r e p . S t a g , T_Zagr.VidZan, T Z a g r . Gruppa.

4. На вкладке Filter (фильтр) зададим условия отбора записей. Для этого в списке Field Name (имя поля) укажем поле, по которому будет осуществляться выборка, — T Prep.Stag. В списке Criteria (критерий) выберем оператор сравнения Between (между), задающий условия выборки. В поле столбца Example (пример) введем через запятую начальную и конечную границы выборки 5, 10.

5. Зададим условия упорядочения записей. Для этого выберем вкладку Order By (упорядочение) и в список Ordering Criteria (критерий упорядочения) внесем последовательно поля T Zagr.VidZan и T_Prep.Fio (рис. 12.13).

12. СУБД Visual FoxPro 8.0

 

471

Fields | Join | Filter Order By | Group By

] Miscellaneous |

 

Selected fields:

Ordering criteria:

 

t

T^zagr.yidzan

L^agrci.ruppa

t

T_prep.fio

 

 

T_prep.stag

 

 

Order options —

 

(*

Ascending

 

j J j С

Descending

 

Рис. 12.13. Выборка со сложным упорядочиванием данных

Для выполнения запроса нажмем кнопку Run (выполнить).

Представление результатов запросов

В рассмотренных примерах результат запроса представлялся в табличном виде на экране. Между тем, результат запроса можно запомнить во вновь созданной таблице или файле, преобразовать в отчет или направить на принтер. Чтобы реализовать одну из перечисленных возможностей, достаточно выполнить команду Query | Query Destination (запрос | назначение запроса) и в появившемся диалоговом окне Query Destination (назначение запроса) (рис. 12.14) нажат!» нужную кнопку (табл. 12.11).

V,.' Q u e r y

D e s t i n a t i o n

 

 

 

 

 

Output destinations:

 

 

 

 

 

 

 

 

Ш

 

 

 

Browse

Cursor

Table

Graph

Screen

Report

Label

Table name: j.. \росоЫе\таблица, dbf

OK Cancel

Рис. 12.14. Диалоговое окно Query Destination

4 7 2 Часть 3. Современные СУБД и их применение

 

Таблица 12.11

Кнопки выбора варианта представления результата запроса

Кнопка

Назначение

B R O W S E

П р о с м о т р р е з у л ь т а т о в в о к н е Browse

C U R S O R

В р е м е н н о е х р а н е н и е р е з у л ь т а т а з а п р о с а для п р о с м о т р а

T A B L E

С о х р а н е н и е в в и д е т а б л и ц ы

G R A P H

С о з д а н и е д и а г р а м м ы с п о м о щ ь ю M S G r a p h

S C R E E N

В ы в о д р е з у л ь т а т о в в ы б о р к и в а к т и в н о м о к н е

R E P O R T

П р е д с т а в л е н и е в в и д е о т ч е т а

LABEL

П р е д с т а в л е н и е в в и д е э т и к е т к и

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

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

Рассмотрим оформление в виде отчета результатов многотабличного запроса 4, используя сохраненный ранее файл запроса Query4.QPR. Для упрощения решения задачи создания отчета на основе многотабличного запроса выполним следующее.

1.Представим результаты запроса в виде одной таблицы, используя опцию Table (таблица) окна Query Destination (назначение запроса).

2.Создадим отчет с помощью Мастера однотабличных отчетов.

Сохранение многотабличного запроса и оформление отчета

При выборе параметра Table (таблица) в окне Query Destination (назначение запроса) (рис. 12.14) мы заказываем форму представления результата запроса в виде таблицы и указываем имя файла, в котором она в дальнейшем будет сохранена. Задание имени файла таблицы в окне Query Destination (назначение запроса) выполняется путем ввода имени файла в поле Table name (имя таблицы) или с помощью диалогового окна Open (открыть), вызываемого нажатием кнопки справа.

Замечание.

Все опции направления вывода результатов, выбираемые в диалоговом окне Query Destination (назначение запроса), дают ожидаемый результат только после нажатия в нем кнопки ОК и выполнения запроса, например с помощью команды Query | Run Query (запрос | выполнить запрос).