Добавлен: 28.11.2018

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

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

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
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 

и