Добавлен: 28.11.2018

Просмотров: 4282

Скачиваний: 10

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

36


 KADR.DBF 

TAB

 BRIG3.DBF 

  TAB 

BRIG5.DBF 

  TAB 

 B 

 C 

   <

база1> <база2>  <база3> 

 
 

  

Рис

. 2   

                

Рис

.3 

Сцепление

баз

можно

распространить

и

на

большее

число

уровней

Например

пусть

имеется

три

базы

данных

 (<

база

1>, 

<

база

2>, <

база

3>), 

в

которых

содержатся

данные

о

предприяти

-

ях

цехах

для

всех

предприятий

и

участках

для

всех

цехов

всех

предприятий

  (

рис

..3). 

Необходимо

связать

эти

базы

таким

обра

-

зом

чтобы

для

каждой

текущей

записи

из

базы

предприятий

ука

-

затель

записей

базы

цехов

становился

на

первую

запись

где

на

-

ходятся

сведения

о

цехе

принадлежащем

данному

предприятию

а

указатель

в

базе

участков

 - 

на

запись

с

информацией

об

участке

этого

цеха

Естественно

что

все

базы

должны

иметь

поля

позво

-

ляющие

осуществить

их

содержательное

сцепление

база

цехов

должна

иметь

поле

с

названиями

предприятий

а

база

участков

 - 

поле

с

названиями

предприятий

и

поле

с

номерами

цехов

Имен

-

но

по

этим

полям

должно

быть

сделано

индексирование

В

отличие

от

предыдущего

примера

где

сцепление

базы

KADR.DBF 

выполнялось

со

всеми

подчиненными

базами

сразу

здесь

команды

 SET RELATION TO 

вводятся

по

мере

перемеще

-

ния

из

области

в

область

Схема

организации

связей

приведена

ниже

USE <

бава

1> IN a 

USE <

баэа

2> IN b INDEX <

ивдекс

2> 

USE <

бава

3> IN 

с

 INDEX <

индекс

3> 

SELECT a 
 
SET RELATION 

ТО

 <

ключ

базы

1> INTO 

Ь

 &&

Сцепление

Базы

с

Ба

-

зой

SELECT 

Ь

SET RELATION 

ТО

 <

ключ

базы

2> INTO 

с

 &&

Сцепление

Баэы

с

Ба

-

зойЗ

Связь

между

базами

может

быть

установлена

не

только

по

некоторому

ключевому

полю

как

показано

в

примерах

но

и

по

номеру

записи

если

в

качестве

  <

ключа

в

команде

 SET 


background image

37

RELATION 

использовать

функцию

 RECNOQ. 

Это

позволяет

при

необходимости

соединить

две

  «

параллельные

» 

базы

Такая

си

-

туация

может

возникнуть

если

в

базе

должно

быть

более

 255 

предельно

допустимых

полей

В

этом

случае

можно

организо

-

вать

вторую

базу

являющуюся

продолжением

первой

и

связать

их

по

номеру

записи

как

показано

ниже

USE bazal 
USE baza2 IN 

О

SET RELATION TO RECNO (‘bazal') INTO baza2  

&& 

связывание

SROWSE FIELDS bazal.<

поле

>,baza2.<

поле

>  

&& 

просмотр

Аппарат

сцепления

баз

командой

 SET RELATION 

является

мощным

средством

доступа

к

  «

родственным

» 

данным

Однако

поскольку

такое

сцепление

влечет

синхронное

перемещение

указателей

записей

во

всех

подчиненных

базах

вслед

за

пере

-

мещением

указателя

в

главной

базе

это

может

отнимать

много

времени

в

случае

если

доступ

к

младшей

базе

в

данный

момент

не

нужен

Поэтому

часто

бывает

целесообразным

временное

разъединение

баз

Во

многих

случаях

вообще

лучше

прибегнуть

к

поиску

нужной

записи

командой

/

функцией

 SEEK, 

нежели

уста

-

новлению

постоянной

связи

Задание

 3 

1. 

Установить

связь

между

файлами

 GROUP 

и

 STUDY (

создать

файл

 GR-ST.VEIW). 

2. 

Вывести

в

текстовый

файл

фамилии

названия

предметов

и

оценки

только

для

женщин

Для

проверки

представить

файлы

 DBF :GROUP STUDY , 

файл

 GR-ST.VEIW 

и

текстовый

файл

созданный

в

вопросе

 2. 


background image

38

4. 

ФОРМИРОВАНИЕ

ЗАПРОСОВ

                                    

ИЗ

БАЗЫ

ДАННЫХ

Команда

 SELECT 

Команда

является

мощным

средством

обработки

запро

-

сов

С

ее

помощью

из

базы

-

источника

выделяются

нужные

дан

-

ные

и

пересылаются

на

экран

или

в

файл

-

приемник

Данные

могут

быть

извлечены

из

разных

баз

а

также

сгруппированы

и

упорядочены

желаемым

образом

Команда

имеет

массу

опций

-

возможностей

Ввиду

этого

сначала

приведем

ее

предварительный

синтаксис

который

по

-

зволит

затем

лучше

осознать

детали

SEL

ЕСТ

 <

что

выводится

  

FROM <

откуда

 (

источник

)> INTO <

куда

 (

получатель

)> 

 WHERE

<

каким

условиям

должно

отвечать

 > 

   GROUP  BY  <

колонки

по

которым

выполняется

группи

-

рование

  HAVING <

условие

группирования

записей

в

одну

строку

>  

 ORDER BY <

в

каком

порядке

выводить

данные

Команда

 SELECT 

и

вообще

команды

 SQL 

сами

открывают

нужные

им

базы

данных

и

индексные

файлы

Если

необходимых

для

выполнения

команды

индексов

нет

они

будут

созданы

а

по

завершении

команды

уничтожены

Открытие

соответствующей

базы

данных

  (

например

с

мощью

команды

 SELECT) 

открывает

и

индекс

Команда

 SELECT 

допускает

включение

в

себя

других

внутренних

команд

 SELECT (

формирование

подзапросов

). 

Все

примеры

использования

команды

 SELECT 

сгруппиро

-

ваны

в

конце

раздела

Сейчас

рассмотрим

опции

команды

Указание

результатов

выборки

и

источников

данных

 
SELECT [DISTINCT] [<

псевдоним

>.]<

выражение

> [AS <

ко

-

лонка

>] 

FROM <

БД

> [<

псевдоним

>] [,<

БД

> [<

псевдо

-

ним

>]...] 

Здесь

указывается

что

и

откуда

берется

в

выборку

Перед

словом

 FROM 

перечисляются

отбираемые

  <

выражения

>, 

а

по

-


background image

39

сле

 – 

имена

баз

из

которых

берутся

данные

.

Если

необходимо

построить

выборку

из

всех

полей

базы

вместо

их

перечня

мож

-

но

указать

символ

 «*». 

В

 <

выражении

могут

быть

использованы

любые

функции

FoxPro. 

Кроме

того

здесь

есть

еще

собственные

специальные

арифметические

функции

действующие

  «

по

вертикали

». 

Это

функции

вычисления

среднего

минимального

и

максимального

значений

суммирования

а

также

количества

записей

А

VG(<

выр

>), 

М

IN(<

выр

>), 

МАХ

(<

выр

>), SUM(<

выр

>), 

СО

-

UN

Т

(<

выр

>). 

Последняя

функция

может

иметь

в

качестве

аргумента

звездочку

  (COUNT(*)), 

что

означает

подсчет

всех

записей

по

-

павших

в

выборку

Включение

опции

 DISTINCT 

исключает

возможность

вы

-

вода

одинаковых

строк

в

выборке

Указание

объекта

куда

пересылается

выборка

Данные

из

запроса

могут

передоваться

в

другую

базу

дан

-

ных

массив

текстовый

файл

экран

и

принтер

.

Кроме

того

ин

-

формация

может

быть

переслана

в

так

называемый

Курсор

Курсор

 - 

это

временный

набор

данных

который

может

быть

об

-

ластью

памяти

или

временным

файлом

 FoxPro 

и

имеет

режим

«

Только

чтение

». 

Данные

Курсора

могут

быть

например

предъ

-

явлены

в

команде

 BROWSE, 

напечатаны

из

них

может

быть

образовано

меню

и

т

.

д

Курсор

может

быть

обработан

другой

  

командой

 SELECT. 

К

колонкам

Курсора

надо

обращаться

по

имени

этих

колонок

возможно

с

префиксом

 - 

именем

Курсора

(

через

точку

). 

Итак

INTO <

получатель

 > 

<

Получатель

может

быть

одного

из

следующих

типов

ARRAY <

массив

> - 

задается

вновь

создаваемый

двумер

-

ный

 <

массив

>. 

CURSOR <

курсор

> - 

задается

имя

Курсора

DBF/TABLE <

БД

> - 

новая

база

данных

с

указанным

именем

Слова

 DBF 

и

 TABLE 

здесь

являются

синонима

-

ми

Кроме

того

данные

можно

переслать

в

файл

или

на

прин

-

тер


background image

40

ТО

 FILE <

файл

> [ADDITIVEJ/TO PRINTER - 

выборка

посы

-

лается

в

текстовый

  <

файл

или

на

принтер

Если

используется

слово

 ADDITIVE, 

то

выборка

будет

добавлена

в

конец

су

-

ществующего

файла

без

его

перезаписи

Следующие

опции

имеют

смысл

только

при

выдаче

на

эк

-

ран

 (

команда

используется

без

слова

 INTO): 

NOCONSOLE - 

выборка

не

выдается

на

экран

PLAIN - 

заголовки

колонок

не

выдаются

NOWAIT - 

не

делаются

паузы

при

заполнении

экрана

Критерий

отбора

данных

 
WHERE <

условие

связи

> [AND <

условие

связи

> ...] 

[AND/OR <

условие

отбора

> [AND/OR <

условие

отбора

>…]] 

Здесь

<

Условие

связи

> - 

применяется

в

случае

если

выборка

делается

более

чем

из

одной

базы

данных

и

указывает

крите

-

рий

которому

должны

отвечать

поля

из

разных

баз

В

условии

связи

указываются

поля

из

разных

баз

Здесь

разрешается

ис

-

пользовать

знаки

отношения

 =, #, ==,  >, >=, <, <=. 

Допускается

задание

нескольких

критериев

соединенных

знаком

 AND. 

<

Условие

отбора

> - 

строится

аналогично

но

из

выражений

только

для

одной

базы

и

допускается

использование

логических

операторов

 OR 

и

 NOT. 

Условия

кроме

любых

функций

 FoxPro, 

могут

содержать

следующие

операторы

 SQL: 

LIKE - 

позволяет

построить

условие

сравнения

по

шабло

-

ну

где

символ

 «_» 

указывает

единичный

неопределенный

сим

-

вол

в

троке

, «%»- 

любое

их

количество

Эти

символы

аналогич

-

ны

символам

маски

 «?» 

и

 «*» 

в

 MS DOS. 

Формат

оператора

<

выражение

> LIKE <

шаблон

BETWEEN

проверяет

находится

ли

выражение

в

указан

-

ном

диапазоне

Формат

оператора

: <

выражение

> BETWEEN 

<

нижнее

знач

.> AND <

верхнее

знач

.> 

IN - 

проверяет

находится

ли

выражение

стоящее

слева

от

слова

 IN, 

среди

перечисленных

справа

от

него

  (

аналогично

функции

 INLIST). 

Формат

оператора

<

выражение

> IN (<

выражение

>,<

выражение

>,...) 

Все

указанные

операторы

можно

комбинировать

с

помо

-

щью

связок

 OR, AND, NOT 

и

скобок

Операторы

 LIKE 

и