Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД / Uchpos / Gl_4.doc
Скачиваний:
29
Добавлен:
27.04.2015
Размер:
342.53 Кб
Скачать

Функции Min, Max

Возвращают минимальное и максимальное значения из набора значений, содержащихся в указанном поле запроса.

Синтаксис

Min(выражение)

Max(выражение)

Функции Min и Max используют следующий аргумент:

Аргумент выражение является строковым выражением, которое определяет поле, содержащее вычисляемые данные, или выражение, выполняющее вычисления с данными из этого поля. Операнды аргумента выражение могут включать имя поля таблицы, константу или функцию (которая может быть внутренней или определяться пользователем, но не одной из других статистических функций SQL или статистических функций по подмножествам).

Функции Min и Max используются для определения наименьшего и наибольшего значений из поля на основе группы. Если не указан способ группирования, используется вся таблица.

Функции StDev, StDevP

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

Синтаксис

StDev(выражение)

StDevP(выражение)

Аргумент выражение является строковым выражением, которое определяет поле, содержащее вычисляемые числовые данные, или выражение, выполняющее вычисления с данными из этого поля. Операнды аргумента выражение могут включать имя поля таблицы, константу или функцию (которая может быть внутренней или определяться пользователем, но не одной из других статистических функций SQL или статистических функций по подмножествам).

Функции StDevP и StDev вычисляют величину смещенного и несмещенного среднеквадратичного отклонения.

Если базовый запрос содержит меньше двух записей (или не содержит записей для функции StDevP), эти функции возвращают значение Null (что означает невозможность вычисления среднеквадратичного отклонения).

Функция Sum

Возвращает сумму набора значений, содержащихся в заданном поле запроса.

Синтаксис

Sum(выражение)

Аргумент выражение является строковым выражением, которое определяет поле, содержащее добавляемые числовые данные, или выражение, выполняющее вычисления с данными из этого поля. Операнды аргумента выражение могут включать имя поля таблицы, константу или функцию (которая может быть внутренней или определяться пользователем, но не одной из других статистических функций SQL или статистических функций по подмножествам).

Функция Sum выполняет суммирование значений в поле.

Функция Sum пропускает записи с пустыми полями.

Функции Var, VarP

Возвращают значение смещенной и несмещенной дисперсии, вычисляемой по набору значений, содержащихся в указанном поле запроса.

Синтаксис

Var(выражение)

VarP(выражение)

Функции VarP и Var вычисляют значение смещенной и несмещенной дисперсии.

Если базовый запрос содержит меньше двух записей, функции Var и VarP возвращают значение Null (что означает невозможность вычисления дисперсии).

Quel:язык реляционного исчисления с переменными-кортежами

QUEL —это язык запросов INGRESреляционной СУБД, разработанной в Калифорнийском университете в Беркли. Он обладает весьма развитым синтаксисом, представляющим широкий спектр операторов исчисления с переменными-кортежами. Манипуляционная часть языка QUEL является чистой реализацией реляционного исчисления кортежей. Это означает, что в операторах указываются условия, накладываемые на кортежи, с которыми необходимо произвести соответствующие действия.

Оператор исчисления

{u(r) | (t1)…(tk)(R1(t1)…(Rk(tk)u[1]=ti1[j1]…u[r]=tir[jr] }

устанавливает, что ti принадлежит Ri и u образуется из r отдельных компонентов ti, а также формулирует некоторое дополнительное условие . Если  — произвольная формула исчисления с переменными-кортежами без кванторов, то оператор может быть записан в языке QUEL следующим образом:

range of t1 is R1

range of tk is Rk

retrieve (ti1.A1,…,tir.Ar)

where '

Здесь Am являетсяjm-м атрибутом отношенияRim, m=1,2,…,k,а’ - условием  в форме выражения QUEL.

Основной набор операторов манипулирования данными включает операторы RETRIVE (выбрать), APPEND (добавить), REPLACE (заменить) и DELETE (удалить). Перед выполнением любого из этих операторов необходимо определить используемые в них кортежные переменные, связав их с соответствующими отношениями путем выполнения оператора range.

Интуитивный смысл оператора

range of t is R

заключается в том, что любые последующие операции должны быть выполнены по одному разу для каждого принадлежащего Rкортежа при t,равном поочередно каждому из этих кортежей. Эта декларация имеет силу до тех пор, пока tне будет переопределено другим оператором range.

Оператор выборки retrieveпечатает таблицу с именами столбцовAi1,…,Aik. Если мы желаем назначить столбцу m иное имя, скажем, ЗАГОЛОВОК, то следует написать ЗАГОЛОВОК = tim.Ajm.

Оператор retrieve into R присваевает значение новому отношению с именемR.

Для сортировки отношения используется оператор sort. При сортировке удаляются дубликаты кортежей.

Для печати отношений служит оператор print.

Язык QUEL содержит также операторы определения ограничений целостности, представлений и ограничений доступа.

Продемонстрируем основные свойства операторов QUEL на примерах. Будем использовать ту же базу данных, что и при рассмотрении SQL.

Определить имена поставщиков из Калининграда:

range of p is Поставщики

retrieve (p.Имя)

where p.Адрес = “Калининград”

Определить наименования товаров типа “Обувь”:

range of tis Товары

range of p is Типы

retrieve (p.Наименование)

where p.Наименование =“Обувь” and p.Тип =t.Тип

Определить имена поставщиков, поставляющих хотя бы один товар с местом хранения Москва:

range of tis Товары

range of pis Поставки

range of vis Поставщики

retrieve (v.Имя)

where t.Место_хранения =“Москва” and t.Код_товара =p.Код_товара and p.Код_поставщика =v.Код_поставщика

Добавить в таблицу Товары новый товар:

append to Товары(155,”Новый_товар”,15,250.50,”Тула”)

Определить коды товаров, поставляемых несколькими поставщиками:

range of pis Поставки

range of vis Поставки

retrieve into Коды(p.Код_товара)

where p.Код_товара =v.Код_товара and p.Код_поставщика !=v.Код_поставщика

sort Коды

print Коды

Удалить сведения о поставках товаров, если количество поставляемого товара меньше 5:

range of pis Поставки

delete p

where p.Количество< 5

Увеличить на 25% цену всех товаров, хранящихся в Москве:

range of tis Товары

replace t (ЦенаbyЦена * 1.25)

where t.Место_хранения =“Москва

В языке QUEL,как и в SQL,используются агрегатные функции: сумма sum,среднее avg,счетчик count,минимум minи максимум max.Аргументом таких функций может быть любое выражение, содержащее компоненты одного отношения, константы и арифметические операторы. Все компоненты должны указываться как t.Aдля переменной-кортежа tи различных атрибутов А.

Определить суммарное количество всех поставляемых товаров:

range of pis Поставки

retrieve (sum(p.Количество))

Определить наименования товаров с ценой, меньшей средней цены всех товаров:

range of tis Товары

retrieve (t.Наименование)

where t.Стоимость< avg(t.Стоимость)

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

ag-op (E by F1, F2, ...,Fk),

где Е и Fi —выражения, операндами которых являются константы и компоненты t.Aдля одной переменной-кортежа t.Операнды в выражении могут соединяться арифметическими операторами. Если tопределено на R,значение функции вычисляется для значенийEгруппы кортежей R с одинаковыми значениями F1, …,Fk.

Получить таблицу, содержащую коды поставщиков и средние количества поставляемых ими товаров:

range of pis Поставки

retrieve into Средние(Код_поставщика =p.Код_поставщика,

Среднее = avg(p.Количествоby p.Код_поставщика))

sort Средние

print Средние

Язык QUEL содержит операторы для создания и уничтожения отношений:

create имя_отношения (имя_атрибута is тип_атрибута, ...)

destroy имя_отношения

а также два оператора изменения структур хранимых данных:

modify имя_отношения to структура_памяти on (ключ1, ключ2,...)

и

index on имя_отношения is имя_индекса (ключ1, ключ2, ...).

Если для кортежей не установлено конкретное упорядочение, файл называется кучей. Мы можем обеспечить хешированный доступ к файлу для отношения R,если запишем:

modify R to hash on A1, ...,Ak,

где A1, ..., Ak —список атрибутов R,которые служат ключом.

В качестве альтернативы использованию структуры с хешированным доступом может быть создан первичный индекс файла для R.С этой целью следует написать:

modify R to isam on A1, ...,Ak.

Здесь снова предполагается, что A1, ...,Akесть ключ для R.Акронимisamобозначает индексно-последовательный метод доступа (indexed sequential access method).

Вторичный индекс для Rможно создать с помощью оператора

index on R is S(A1, ...,Ak}.

Отношение Sв результате этого становится вторичным индексом дляRпо атрибутам A1, ...,Ak.Отношение Sсостоит из k + 1компонентов, первыми kиз которых являются A1, ...,Ak, а последним —указатель на записи из R.Этот последний компонент не имеет имени атрибута, и поэтому пользователь не может осуществлять доступ к его значениям или изменять их . Файл для вторичного индекса Sавтоматически делается файлом с индексно-последовательным методом доступа по A1, ...,Ak,хотя такая организация может быть изменена командой modify так же, как и для любого другого отношения.

В рассмотренном виде язык QUEL предназначен для интерактивной работы с базами данных Ingres. Для программирования прикладных информационных систем, которые должны взаимодействовать с базами данных, был разработан язык программирования EQUEL, являющийся, по существу, расширением языка программирования Си путем встраивания в него операторов языка QUEL. Язык EQUEL определяется следующим образом:

1) Любой оператор языка Си является оператором языка EQUEL.

2) Любой оператор языка QUEL, которому предшествуют два знака "#", является допустимым оператором языка EQUEL.

3) Переменные Си-программы могут использоваться в операторах QUEL, заменяя имена отношений, имена атрибутов, элементы списка выборки или константы. Те переменные Си-программы, которые используются таким образом, должны при своем объявлении быть помечены двойным знаком "#".

4) Оператор RETRIEVE (без INTO) сопровождается составным оператором языка Си, который выполняется по одному разу для каждого выбранного кортежа.

Приведем пример программы на языке EQUEL, выдающей код поставщика по его имени:

main() {

# # char post_name[20];

# # int Kod_post;

while (READ(post_name)) {

# # RANGE OF p IS Post

# # RETRIEVE (p. kod_post)

# # WHERE (p.post_name = post_name)

{ PRINT ("The post kod of "post_name" is

"kod_post"); }

}

}

Программа на языке EQUEL обрабатывается специальным препроцессором, который превращает ее в обычную Си-программу, содержащую вызовы Ingres с передачей в качестве параметров текстов операторов языка QUEL.

Соседние файлы в папке Uchpos