Оператор проекции RelaX принимает список выражений, дающих значения столбцов каждой возвращаемой строки. Эти выражения могут быть просто именами столбцов, но это не обязательно. (Как и в случае предложения SQL select
.)
Из справочная ссылка :
1011 * проекция *
Выражения могут использоваться для создания более сложных операторов, используя один или несколько столбцов одной строки.
pi c.id, lower(username)->user, concat(firstname, concat(' ', lastname))->fullname (
ρ c ( Customer )
)
Значения
В большинстве операторов вы можете использовать выражение-значение, которое соединяет один или несколько столбцов одной строки для вычисления нового значения. Это возможно для:
- проекция, создающая новый столбец (обязательно дайте столбцу имя)
- выделение может быть использовано любое выражение, вычисляющее как логическое
- для объединений может использоваться любое выражение, вычисляющее как логическое; обратите внимание, что выражение rownum () всегда представляет индекс левого отношения
PS RelaX - это язык запросов, а не алгебра. Его «выражения значения» не оцениваются до значения перед вызовом. Возникает вопрос: как бы мы реализовали язык, используя алгебру?
С Разрешено ли умножение в реляционной алгебре? :
Некоторые так называемые «алгебры» действительно являются языками, потому что выражения не только представляют результаты операторов, вызываемых для значений. Хотя для алгебры возможно иметь значения операндов, которые представляют выражения и / или значения отношений, которые содержат имена для себя.
Проекция, которая принимает выражения атрибутов, поднимает вопрос о ее реализации, учитывая алгебру с проекцией только на значение отношения и имена атрибутов. Это важно в академической обстановке, потому что вопрос может заключаться в том, что вам нужно выяснить, как это сделать, или потому что сложность вопроса зависит от доступных операторов. Так что выясни, какую алгебру ты должен использовать.
Мы можем ввести оператор для значений атрибутов, когда у нас есть только базовые операторы отношений, принимающие имена атрибутов и значения отношений. Каждый такой оператор может быть связан со значением отношения, которое имеет атрибут для каждого операнда и атрибут для результата. Отношение содержит кортежи, в которых значение результата равно результату оператора, вызываемого для значений операнда. (Результат функционально зависит от операндов.)
С Правило реляционной алгебры для преобразования столбцов :
Предположим, вы предоставляете оператор деления для значений столбца в форме постоянного базового отношения, называемого DIVIDE
, содержащего кортежи, где dividend
/ divisor
= quotient
. Я буду использовать простейшую алгебру с заголовками, которые являются наборами имен атрибутов. Предположим, у нас есть входное отношение R
со столбцом c
и среднее A
. Мы хотим, чтобы отношение было похоже на R
, но для каждого столбца c
значение было установлено на свое первоначальное значение, деленное на A
.
/* rows where
EXISTS dividend [R(dividend) & DIVIDE(dividend, A, c)]
*/
PROJECT c (
RENAME c\dividend (R)
NATURAL JOIN
RENAME quotient\c (
PROJECT dividend, quotient (SELECT divisor=A (DIVIDE))))
С Реляционная алгебра - перекодировать значения столбцов :
Чтобы ввести конкретные значения в выражение реляционной алгебры, у вас должен быть способ записи табличных литералов. Обычно необходимые операторы не делаются явными, но, с другой стороны, в алгебраических упражнениях часто используются какие-то обозначения, например значения.