JOIN WITH псевдоним FOR условие FIELDS список_полей
Запись исходного файла объединяется с записью файла, открытого под именем псевдоним, если выполняется условие. Формируется новый файл, схема которого задается списком полей.
Для одновременной работы более чем с двумя файлами используются переменные, в которых сохраняются значения полей в качестве внешнего ключа связи.
Кроме того, данный класс реляционных языков реализует типовые конструкции языков структурного программирования:
циклы (DO WHILE .... END DO);
условные операторы (IF ... ELSE ... ENDIF);
альтернативные операторы (DO CASE ... OTHERWISE ...ENDCASE) и др.
Реляционные dBASE-подобные языки занимают промежуточное положение между языками манипулирования данными СУБД и языками программирования, обладают выраженной процедурностью обработки, когда явно указывается последовательность действий, приводящих к конечному результату.
Графические (схематичные) реляционные языки
Типичным представителем является язык QBE (Query By Example), реализованный в среде электронных таблиц, в ряде СУБД, в пакете Microsoft Query.
Данный язык относится к языкам манипулирования данными. Работа выполняется со схемой реляционной таблицы с использованием простейших синтаксических конструкций.
Для вертикальной выборки (проекции) записей реляционной таблицы осуществляется пометка отбираемых полей с помощью символа √ (помеченное поле выводится в выходную структуру новой реляционной таблицы).
Для горизонтальной выборки (селекции) задаются логические условия (критерии) отбора записей в поисковых полях.
Условия могут задаваться как выражения, построенные с помощью операторов различного вида: Арифметические операторы – используются для выполнения вычислений с числами в качестве
констант выражения:
* Умножения двух чисел + Сложения двух чисел
- Вычитания одного числа из другого / Деления одного числа на другое
Операторы сравнения – используются для сравнения двух значений: > (больше)
>= (больше или равно) < (меньше)
<= (меньше или равно) <> (не равно)
= (равно).
Логические операторы – используются с выражениями, которые могут быть истинными или ложными:
И (AND) – должны выполняться оба критерия. Или (OR) – должен выполняться один из критериев. Не (NOT) – этот критерий не должен выполняться.
Могут использоваться специальные операторы типа:
612
BETWEEN – значение в заданном диапазоне. IN – одно из значений списка.
IS – с ключевым словом Null определяет, является ли величина нулем (нет значения) или нет (есть значение).
LIKE – использует символы подстановки для сравнения двух значений. Условия задаются в следующих вариантах:
для одного поля;
водной строке для нескольких полей, считая все условия совместными;
вразных строках для одного или разных полей, считая их альтернативными.
Пример 19.55. Для получения фамилий студентов с именем Иван и датой рождения в диапазоне 1.1.79 –1.1.80 создается запрос:
Для получения фамилий студентов с именем Иван с датой рождения в диапазоне 1.1.79-
1.1.80и фамилий студентов с именем Петр создается запрос:
Внекоторых реализациях языка QBE условие на значение диапазона дат может записываться в ином виде:
Язык QBE позволяет вычислять групповые функции (по группе выделенных строк) с помощью функций:
Avg – среднее арифметическое значение поля; Count – число выбранных записей;
Мах – максимальное значение поля; Min – минимальное значение поля; Sum – сумма значений поля.
Для использования подобных функций указываются поля, образующие группу записей.
Пример 19.56. Для подсчета количества студентов с именем Иван и датой рождения в диапазоне 1.1.79 – 1.1.80 создается запрос:
Ключевое слово Сalс означает вычисление значений по данному полю.
Выражения используются в запросе и для формирования новых данных.
Пример 19.57. Для каждого студента определить количество прожитых на сегодняшнюю дату дней:
Символ – идентификатор значения поля, today – встроенная функция вычисления сегодняшней даты.
Для совместной обработки реляционных таблиц строится многотабличный запрос, в котором указываются внешние ключи связи, помечаемые в бланках запроса.
Пример 19.58. Получить сведения о студентах, успевающих на 4 и 5, название дисциплины и результат сдачи экзамена (оценку):
Символы – идентификаторы ключей связи в различных реляционных таблицах. Выходная структура содержит поля: имя, фамилия, результат, название дисциплины. Выводятся сведения о студентах, которые учатся на 4 и 5.
Некоторые версии языка QBE позволяют создать набор (множество) значений указанного поля одной таблицы, по отношению к которому проверяются значения поля другой таблицы. Операции сравнения выполняются на уровне множества значений поля с помощью сравнения наборов:
ONLY – второй набор – подмножество первого, NO – наборы не совпадают,
EVERY – первый набор – подмножество второго, EXACTLY – наборы совпадают.
Первый набор формируется с помощью ключевого слова SET.
Пример 19.59. Получить сведения о студентах, которые имеют такие же результаты, что и студент с зачетной книжкой 123456
В ряде СУБД кроме выборки записей возможны операции включения новых записей (INSERT), удаления записей (DELETE) или групповой корректировки выбранных записей (CHANGETO).
ОСНОВНЫЕ ХАРАКТЕРИСТИКИ ЯЗЫКА SQL
Краткая характеристика языка SQL
SQL (Structured Query Language) – это язык программирования, который используется при работе с реляционными базами данных в современных СУБД (ORACLE, dBASE IY, dBASE Y, Paradox, Access и
др.).
Язык SQL стал стандартом языков запросов для работы с реляционными базами данных для архитектуры как файл-сервер, так и клиент-сервер, а также в условиях применения системы управления распределенными базами данных. SQL использует ограниченный набор команд, но в то же время – это реляционно полный язык, предназначенный для работы с базами данных, создания запросов выборки
данных, выполнения вычислений, обеспечения их целостности. Синтаксис версий языка SQL может в определенной степени различаться для отдельных СУБД. Рассмотрим наиболее общие операторы языка
SQL.
Операторы языка SQL для работы с реляционной базой данных
1. Создание реляционных таблиц. Создание реляционной базы данных означает спецификацию состава полей: указание имени, типа и длины каждого поля (если это необходимо). Каждая таблица имеет уникальное имя.
Синтаксис оператора создания новой таблицы:
где таблица |
- имя создаваемой таблицы; |
поле1, поле2 |
- имена полей таблицы; |
тип |
– тип поля; |
размер |
– размер текстового поля; |
индекс1, индекс2 - директивы создания простых индексов (по отдельному полю); составной_индекс – директива создания составного индекса.
Каждый индекс имеет уникальное в пределах данной таблицы имя.
Для создания простого индекса используется фраза (помещается за именем поля):
CONSTRAINT имя_индекса {PRIMARY KEY | UNIQUE |
REFERENCES внешняя_таблица [(внешнее поле)]}
Директива создания составного индекса (помещается в любом месте после определения его элементов):
CONSTRAINT имя {PRIMARY KEY (ключевое1[, ключевое2 [,....]]) | UNIQUE (уникальное 1[, уникальное [, ...]]) | FOREIGN KEY (ссылка1[, ссылка2 [, ...]]) REFERENCES внешняя_таблица [(внешнее_поле 1 [, внешнее_поле2 [,...]])]}
Служебные слова:
UNIQUE - уникальный индекс (в таблице не может быть двух записей, имеющих одно и то же значение полей, входящих в индекс);
PRIMARY KEY - первичный ключ таблицы (может состоять из нескольких полей; упорядочивает записи таблицы);
FOREIGN KEY – внешний ключ для связи с другими таблицами (может состоять из нескольких полей);
REFERENCES – ссылка на внешнюю таблицу.
Пример 19.60.
CREATE TABLE Студент ([Имя] TEXT,
[Фамилия] TEXT,
[Дата рождения] DATETIME,
CONSTRAINT Адр UNIQUE ([Имя], [Фамилия], [Дата рождения]))
Будет создана таблица СТУДЕНТ, в составе которой: два текстовых поля: Имя, Фамилия, одно поле типа дата/время – Дата рождения.
Создан составной индекс с именем Адр по значениям указанных полей, индекс имеет уникальное значение, в таблице не может быть двух записей с одинаковыми значениями полей, образующих индекс.
2. Изменение структуры таблиц. При необходимости можно выполнить реструктуризацию
таблицы:
удалить существующие поля, добавить новые поля, создать или удалить индексы.
Все указанные действия затрагивают одновременно только одно поле или один индекс:
ALTER TABLE таблица
ADD {[COLUMN] поле тип[(размер)} [CONSTRAINT индекс]|
CONSTRAINT составной_индекс}
DROP {[COLUMN] поле i CONSTRAINT имя_индекса} }
Опция ADD обеспечивает добавление поля, опция DROP – удаление поля таблицы, добавление опции CONSTRAINT означает подобные действия для индексов таблицы.
Пример 19.61.
ALTER TABLE Студент ADD COLUMN [Группа] ТЕХТ(5)
Для создания нового индекса для существующей таблицы можно использовать также команду:
CREATE [ UNIQUE ] INDEX индекс
ON таблица (поле[,...])
[WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }]
Фраза WITH обеспечивает наложение условий на значения полей, включенных в индекс: DISALLOW NULL – запретить пустые значения в индексированных полях новых записей; IGNORE NULL – включать в индекс записи, имеющие пустые значения в индексированных полях.
Пример 19.62.
CREATE INDEX Гр ON Студент ([Группа]) WITH DISALLOW NULL
3. Удаление таблицы. Для удаления таблицы (одновременно и структуры, и данных) используется команда:
DROP TABLE имя_таблицы
Для удаления только индекса таблицы (сами данные не разрушаются) выполняется команда:
DROP INDEX имя_индекса ON имя_таблицы
Пример 19.63.
DROP INDEX Адр ON Студент
–удален только индекс Адр
DROP TABLE Студент
–удалена вся таблица
4.Ввод данных в таблицу. Формирование новой записи в таблице выполняется командой:
INSERT INTO таблица_куда [(поле1[, поле2[,...]])]
VALUES (значение1[, значение2[,...]);
Указывается имя таблицы, в которую добавляют запись, состав полей, для которых вводятся значения.
Пример 19.64.
INSERT INTO Студент ([Фамилия], [Имя], [Дата рождения]) VALUES ("Петров", "Иван", 23/3/80)