RELATIONAL ASSIGNMENT
Relational assignment in general works by assigning a relation value, denoted by some relational expression, to a relation variable, denoted by a relvar reference (where a relvar reference is basically just the pertinent relvar name). Here’s a Tutorial D example:
S := S WHERE NOT ( CITY = 'Athens' ) ;
Now, it’s easy to see that this particular assignment is logically equivalent to the following DELETE statement:
DELETE S WHERE CITY = 'Athens' ;
More generally, the Tutorial D DELETE statement
DELETERWHEREbx;
(where R is a relvar name and bx is a boolean expression) is shorthand for, and hence logically equivalent to, the following relational assignment:
R:=RWHERE NOT (bx) ;
Alternatively, we might say it’s shorthand for this one (either way, it comes to the same thing):
R:=RMINUS (RWHEREbx) ;
Turning to INSERT, the Tutorial D INSERT statement
INSERT R rx ;(where R is again a relvar name and rx is a relational expression—typically but not necessarily a relation selector invocation) is shorthand for:
R:=RUNIONrx;
For example, the INSERT statement—
INSERT SP RELATION { TUPLE { SNO 'S5' , PNO 'P6' , QTY 700 } } ;—effectively inserts a single tuple into the shipments relvar SP.
Finally, the Tutorial D UPDATE statement also corresponds to a certain relational assignment. However, the details are a little more complicated in this case than they are for INSERT and DELETE, and I’ll defer them to Chapter 7.
D_INSERT and I_DELETE
I’ve said the INSERT statement ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access