Да кажем, че операторът rename n (r)
връща таблична стойност като r
, но с нови имена на атрибути като старите с префикс n.
. Тогава имаме:
/* rows where
(cid, sid, grade, gradepoint) in Enroll
and (x.cid, x.sid, x.grade, x.gradepoint) in Enroll
and gradepoint < x.gradepoint and cid = x.cid
*/
restrict gradepoint < x.gradepoint and cid = x.cid (
Enroll times rename x (Enroll)
)
(Които са редове от формата (cid, sid, grade, gradepoint, x.cid, x.sid, x.grade, x.gradepoint)
.)
За съжаление този коментар не казва нищо за бизнес ситуацията. Така че нито масата. Но да предположим, че в нашия случай (cid, sid, grade, gradepoint) in Enroll
когато in course
cid
student
sid
got grade
grade
& grade point average
gradepoint
. (Това е (характерният) предикат на таблицата в бизнес термини.) След това чрез заместване на in
получаваме, че тази заявка също е:
/* rows where
in course cid student sid got grade grade & grade point average gradepoint
and in course x.cid student x.sid got grade x.grade & grade point average x.gradepoint
and gradepoint < x.gradepoint and cid = x.cid
*/
Всеки ред в стойност на таблица (константа/променлива или резултат от заявка) прави изявление от включването му в предиката на таблицата. (И всеки отсъстващ ред посочва отрицанието/not
на израза от включването му в предиката.) Дизайнерът дава предикатите за константа/променлива и предикатът за резултат от заявката идва от тези и операторите за връзка. (restrict
и join
s (включително times
и intersect
) въвеждат and
, project
въвеждат there exists
, union
въвеждат or
, minus
въвеждат and not
и т.н.)
Тук изявлението включва един курс и две оценки, всяка от които принадлежи на различен студент. Така че няма "където оценката е по-ниска от себе си".
Формиране на заявка за релационна алгебра от описание на английски
Има ли някакво основно правило за конструиране на SQL заявка от четливо за човека описание?
(Така нареченият „алгебричен оператор“, както споменахте за „преименуване“ на стойност, наистина е нетерминален език за програмиране за присвояване на променлива. Това е ортогонално на алгебрични стойности и оператори Такова объркване възниква от неясно мислене, типично за апологетиката на SQL.)
person
philipxy
schedule
04.10.2017
Enroll
къмx
, предполагам, че получавате две копия на всеки атрибут, произтичащ от декартовия продукт. Съвпадате само наcid
, така че ще получите различниsid
s,grade
s,gradepoint
s. - person AntC   schedule 04.10.2017