Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
база данных.docx
Скачиваний:
167
Добавлен:
24.03.2015
Размер:
5.83 Mб
Скачать

12.10. Создание запросов

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

Средства формирования запросов

Выборка информации из БД может осуществляться: с помощью команды SELECT SQL языкаVisual FoxPro, которая является аналогом соответствую­щей команды языкаSQL; с помощью Мастера запросов и с помощью Конст­руктора запроса.

Команда SELECT имеет множество возможностей (опций). Ее упрощен­ное представление имеет следующий вид:

SELECT СписокВыбираемыхПолей

FROM СписокТаблиц-источника данных [INTO ИмяТаблицы полу чаче- ля данных]

[WHERE УсловиеВьтборки]

[GROUP BY УсловиеГруппировки]

[ORDER BY УсловиеУпорядочивания выводимых данных]

[ТО FILE ИмяФайла | ТОPRINTER — направление вывода данных]

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

Конструктора запроса позволяет:

• выбирать данные из одной или нескольких таблиц, используя сложные критерии;

  • устанавливать временные < вязи между таблицами;

  • выбирать поля и записитаблиц стребуемыми данными;

  • выполнять вычисления с использованием выбранных данных.

Работа с Конструктором запроса сводится к заполнению форм запроса.

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

Для вызова Конструктора запроса после открытия БД можно воспользо­ваться командой File | New (файл | < Создать)системного менюVisual FoxPro. При выполнении этой команды открывается диалоговое окноNew (рис. 12.2), в котором нужно выбрать переключатель Query (Запрос)и нажать кнопкуNew File (Новый файл).В открывшемся диалоговом окне Ada Table or View (Добавить таблицу или просмотр)следует выбрать одну или несколько таб­лиц и нажать ОК. В результате откроется окно Конструктора запроса (рис. 12.7), содержащее выбранные таблицы, а в системном менюVisual FoxPro по­явится пункт Query (Запрос).

Т |Wf»p

»

A

fio

stag

dolgn

kaf

Query Designer

ш

jd . 3K

<1

ffigSl J Job | Filter | Order 8y j Group By j Miscellaneous j i s

'X1 ■ •

Я

m Щ

»

:• ивПЕгеАИ

'• aitabte fields: Selected fields:

1 Dteo.fio ! i' j

T_prep stag

T_prep. dolgn

T_prep kaf

Functions and expressions:

Рис. 12.7. Окно Конструктора запроса с таблицей TMPREP

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

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

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

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

Для решения перечисленных задач Конструктор содержит: панель для ото­бражения таблиц, используемых в запросе (в рассматриваемом примере на ней находится одна таблица Т PREP), и вкладки (табл. 12.10).

Таблица 12.10

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

Вкладка

Назначение

Fielrls

Выборка полей в результирующую таблицу

Join

-Задание условий объединения таблиц

Filter

Задание фильтра (условий от бора записей)

Order By

-Задание критерия упорядочивания

Group By

Задание vcnoenn группировка данных

Miscellaneous

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

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

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

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

Выбор полей результирующей таблицы

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

Запрос 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.

j Hi Query

шшш\

а 1

Fio

I Dblfjri

Kar J Jgf

#

**шяи

5= преп

25!

Петров П.П.

7| преп

2Е |j

Сидоров С. С.

10|доцент

251 |§!

Егоров £ Е.

12| профессор

251 ..:

!^аглюк1 И.

j г ст, преп

24; •

Не

4

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

Рассмотрим процедуру упорядочения данныхв таблице на примере следу­ющего запроса.

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

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

Ordering Criteria (критерий упорядочения).Для задания критерия упоря дочивания необходимо перенести в Ordering Criteria (критерий упорядоче­ния)поля, которые будут определять порядок расположения выводимых в запросе данных. Процедура переноса аналогична рассмотренной при опреде­лении полей результирующей таблицы. Для реализации нашего первого зап­роса во вкладке Order By (упорядочение)выделим курсором полеTprepiio (поле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 — вхождение, = = - фактическое равенство, > - больше чем, < — меньше чем,

>= - не меньше чем, <= — не больше чем, Is NULL — совпадение сNULL, Between — в диапазоне значений,In - среди заданных значений.

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

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

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

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

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

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

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

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

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

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

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

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

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

juTxl

fio

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

dpi Query Designer - query2

slag d_stag

slag ______

k.

doign oklad

Ш

Fields Join | Filter | Order By liraupBy | Miaelewaut j

Loflicai

Hot Oitei /alue

Тура Field Name

< > inner Joii

T_stag.stag T_prep. dolgn

T prep "tag T dolgn. dolgn

Insert

fierac"e

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

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

Join Condition

13-

Т_ргер dolgn

• Ту;* of ion - (* Irinei ion

T

j T_do!gn.dolqn

С Left'join 'm f fl«Wi«r» C-Fy|j*in

•«

CK

Description

Qeate а мл* set (h*t indutles only tf» T J»at« reiout J* IHat match ' T_ck4gn r»cot:Jt.

3 ^ I

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

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

Замечание.

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

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

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

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

OK

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

Expression Builder

Expression:

T_prep.dolpn + T_stag.d _stag

Cancel

Verify

Math:

' f. functions ; btring:

г

Date:

"3

3

text" Logical.

Option

JeJds.

stag

Л

Щ

Ш

Hon, table- ' T_stag

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

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

I pi Query

iJtfrtf

d jFio V] К at1 Dc'gr.

. Slag |D stagjOkladj Exp

. 1

_|ИвановИ.И.

25

51 50! 1000| 1U50= j

J Петров П.П.

251 лреп

Ъ 50! i

II iC 1 2100;

,L

Сидоров С. С.

25! цоцет

10! 1001 2000!

JETODOBE Е

25! пиоФессор

12! 150! 2500! 2650! i

ш

1 1 t r

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