3.1 See the body of the chapter.

3.2 Two values of any kind are equal if and only if they’re the very same value (meaning they must be of the same type, a fortiori). In particular, therefore, (a) two tuples *t* and *t′* are equal if and only if they have the same attributes *A1, A2, ..., An* and for all *i* (*i* = 1, 2, ..., *n*), the value *v* of *Ai* in *t* is equal to the value *v′* of *Ai* in *t′;* (b) two relations *r* and *r′* are equal if and only if they have the same heading and the same body (i.e., their headings are equal and their bodies are equal).

3.3 **Tutorial D** tuple selector invocations (actually literals):

TUPLE { PNO 'P1' , PNAME 'Nut' , COLOR 'Red' , WEIGHT 12.0 , CITY 'London' } TUPLE { SNO 'S1' , PNO 'P1' , QTY 300 }

SQL analogs (“row value constructor” invocations):

ROW ( 'P1' , 'Nut' , 'Red' , 12.0 , 'London' ) ROW ( 'S1' , 'P1' , 300 )

Observe the lack of column names (or field names, to use the SQL term) and the reliance on left to right ordering in these SQL expressions. The keyword ROW can be omitted without changing the meanings.

3.4 The following selector invocation (actually a literal) denotes a relation of two tuples:

RELATION { TUPLE { SNO 'S1' , PNO 'P1' , QTY 300 } , TUPLE { SNO 'S1' , PNO 'P2' , QTY 200 } }

SQL analog (a “table value constructor” invocation, involving two “row value constructor” invocations):

VALUES ROW ( 'S1' , 'P1' , 300 ) , ROW ( 'S1' , 'P2' , 200 )

Either or both of the two row value constructor invocations here can omit the ROW keyword if desired. ...

Start Free Trial

No credit card required