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

     DELETE R WHERE bx ;

(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 := R WHERE NOT ( bx ) ;

Alternatively, we might say it’s shorthand for this one (either way, it comes to the same thing):

R := R MINUS ( R WHERE bx ) ;

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 := R UNION rx ;

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 ...

Get SQL and Relational Theory, 2nd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.