Синтаксис реляционных выражений
.
Определим теперь синтаксис для операций РА, который будем использовать в дальнейшем[22]. Основной синтаксической единицей является выражение
РА, производящее отношение. Любое выражение является безымянным производным отношением.
выражение
::= унарное-выражение | бинарное-выражение; | |
унарное-выражение ::=
переименование | выборка | проекция; | |
переименование
::= терм RENAME атрибут AS атрибут; | |
терм
::= отношение | (выражение); | |
выборка
::= терм WHERE предикат; | |
предикат
::= сравнение | предикат AND предикат | предикат OR предикат | NOT предикат[23]; | |
сравнение
::= символ q символ; | |
символ
::= атрибут | константа; | |
q ::=
< | > | =; | |
проекция
::= терм | терм [список]; | |
бинарное-выражение
::= проекция бинарная-операция выражение; | |
бинарная-операция
::= UNION | INTERSECT | MINUS | TIMES | JOIN | DIVIDEBY; |
Здесь атрибут
– идентификатор, список – список разделенных запятыми атрибутов, константа
– литеральное значение.
Примеры.
Унарные выражения.
S RENAME S# AS Snum; | переименование S# в Snum | ||
S; | проекция S на все атрибуты схемы. | ||
S[S#, Ci]; | проекция S на атрибуты {S#, Ci}. | ||
S WHERE Ci = ‘Томск’ | выборка по условию Ci = ‘Томск’ |
Бинарные выражения.
(S[Ci]) UNION (P[Ci]); | объединение проекций; | ||
(S[Ci]) INTERSECT (P[Ci]); | пересечение проекций; | ||
(S[Ci]) MINUS (P[Ci]); | разность проекций; | ||
(S RENAME Ci AS SCi) TIMES
(P RENAME Ci AS Pci); | расширенное прямое произведение; | ||
(SPJ[S#, P#]) DIVIDEBY (P[P#]); | реляционное деление; | ||
(S JOIN SPJ)[Sn, Qt]; | проекция объединения; |