ВУЗ: Томский государственный университет систем управления и радиоэлектроники
Категория: Учебное пособие
Дисциплина: Базы данных
Добавлен: 28.11.2018
Просмотров: 2683
Скачиваний: 8
36
A
KADR.DBF
TAB
B
BRIG3.DBF
TAB
BRIG5.DBF
TAB
C
A
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
Ь
&&
Сцепление
Базы
1
с
Ба
-
зой
2
SELECT
Ь
SET RELATION
ТО
<
ключ
базы
2> INTO
с
&&
Сцепление
Баэы
2
с
Ба
-
зойЗ
Связь
между
базами
может
быть
установлена
не
только
по
некоторому
ключевому
полю
,
как
показано
в
примерах
,
но
и
по
номеру
записи
,
если
в
качестве
<
ключа
>
в
команде
SET
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.
38
4.
ФОРМИРОВАНИЕ
ЗАПРОСОВ
ИЗ
БАЗЫ
ДАННЫХ
Команда
SELECT
Команда
является
мощным
средством
обработки
запро
-
сов
.
С
ее
помощью
из
базы
-
источника
выделяются
нужные
дан
-
ные
и
пересылаются
на
экран
или
в
файл
-
приемник
.
Данные
могут
быть
извлечены
из
разных
баз
,
а
также
сгруппированы
и
упорядочены
желаемым
образом
.
Команда
имеет
массу
опций
-
возможностей
.
Ввиду
этого
сначала
приведем
ее
предварительный
синтаксис
,
который
по
-
зволит
затем
лучше
осознать
детали
.
SEL
ЕСТ
<
что
выводится
>
FROM <
откуда
(
источник
)> INTO <
куда
(
получатель
)>
WHERE
<
каким
условиям
должно
отвечать
>
GROUP BY <
колонки
,
по
которым
выполняется
группи
-
рование
>
HAVING <
условие
группирования
записей
в
одну
строку
>
ORDER BY <
в
каком
порядке
выводить
данные
>
Команда
SELECT
и
вообще
команды
SQL
сами
открывают
нужные
им
базы
данных
и
индексные
файлы
.
Если
необходимых
для
выполнения
команды
индексов
нет
,
они
будут
созданы
,
а
по
завершении
команды
уничтожены
.
Открытие
соответствующей
базы
данных
(
например
,
с
мощью
команды
SELECT)
открывает
и
индекс
.
Команда
SELECT
допускает
включение
в
себя
других
внутренних
команд
SELECT (
формирование
подзапросов
).
Все
примеры
использования
команды
SELECT
сгруппиро
-
ваны
в
конце
раздела
.
Сейчас
рассмотрим
опции
команды
.
Указание
результатов
выборки
и
источников
данных
SELECT [DISTINCT] [<
псевдоним
>.]<
выражение
> [AS <
ко
-
лонка
>]
FROM <
БД
> [<
псевдоним
>] [,<
БД
> [<
псевдо
-
ним
>]...]
Здесь
указывается
,
что
и
откуда
берется
в
выборку
.
Перед
словом
FROM
перечисляются
отбираемые
<
выражения
>,
а
по
-
39
сле
–
имена
баз
,
из
которых
берутся
данные
.
Если
необходимо
построить
выборку
из
всех
полей
базы
,
вместо
их
перечня
мож
-
но
указать
символ
«*».
В
<
выражении
>
могут
быть
использованы
любые
функции
FoxPro.
Кроме
того
,
здесь
есть
еще
собственные
специальные
арифметические
функции
,
действующие
«
по
вертикали
».
Это
функции
вычисления
среднего
,
минимального
и
максимального
значений
суммирования
,
а
также
количества
записей
:
А
VG(<
выр
>),
М
IN(<
выр
>),
МАХ
(<
выр
>), SUM(<
выр
>),
СО
-
UN
Т
(<
выр
>).
Последняя
функция
может
иметь
в
качестве
аргумента
звездочку
(COUNT(*)),
что
означает
подсчет
всех
записей
,
по
-
павших
в
выборку
.
Включение
опции
DISTINCT
исключает
возможность
вы
-
вода
одинаковых
строк
в
выборке
.
Указание
объекта
,
куда
пересылается
выборка
Данные
из
запроса
могут
передоваться
в
другую
базу
дан
-
ных
,
массив
,
текстовый
файл
,
экран
и
принтер
.
Кроме
того
,
ин
-
формация
может
быть
переслана
в
так
называемый
Курсор
.
Курсор
-
это
временный
набор
данных
,
который
может
быть
об
-
ластью
памяти
или
временным
файлом
FoxPro
и
имеет
режим
«
Только
чтение
».
Данные
Курсора
могут
быть
,
например
,
предъ
-
явлены
в
команде
BROWSE,
напечатаны
,
из
них
может
быть
образовано
меню
и
т
.
д
.
Курсор
может
быть
обработан
другой
командой
SELECT.
К
колонкам
Курсора
надо
обращаться
по
имени
,
этих
колонок
,
возможно
,
с
префиксом
-
именем
Курсора
(
через
точку
).
Итак
:
INTO <
получатель
>
<
Получатель
>
может
быть
одного
из
следующих
типов
:
ARRAY <
массив
> -
задается
вновь
создаваемый
двумер
-
ный
<
массив
>.
CURSOR <
курсор
> -
задается
имя
Курсора
.
DBF/TABLE <
БД
> -
новая
база
данных
с
указанным
именем
.
Слова
DBF
и
TABLE
здесь
являются
синонима
-
ми
.
Кроме
того
,
данные
можно
переслать
в
файл
или
на
прин
-
тер
.
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
и