=====
CS 325 - Week 10 Asynchronous Material - Part 2
=====
*    SQL parts, now!

=====
SQL - more on those set-theoretic operations
=====
*   in addition to UNION, SQL also supports additional set-theoretic
    operations, including INTERSECT and MINUS
                          ^ intersection operation
                                        ^ difference operation

*   but we are talking sets of TUPLES, relations, of course;

    so all three DO require so-called union-compatibility --
    both relations need to have the same number of attributes,
    and their domains need to be compatible!

*   So, union of 2 relations R1 and R2, (R1 u R2)
    *   if a tuple is in R1, it is in (R1 u R2)
    *   if a tuple is in R2m it is in (R1 u R2)
    *   (and it can be in both R1 and R2, but it is in (R1 u R2) just once,
        because in a set you care if something is a member of the set or not...

*   Intersection of 2 relations R1 and R2, (R1 n R2)
    *   if a tuple is in R1 AND it is also in R2, then it is in (R1 n R2)

*   Difference of 2 relations R1 and R2, (R1 - R2)
    *   if a tuple is in R1 AND it is also NOT in R2, then it is (R1 - R2)

*   in SQL, the operators are UNION, INTERSECT, and MINUS

    and these have operands that are sub-selects!

    (desired sub-select)
    union
    (desired sub-select)

    (desired sub-select)
    intersect
    (desired sub-select)

    (desired sub-select)
    minus
    (desired sub-select)

*   note: the column names you'll see will be those from the 1st sub-select
    (whether column name, computation, or column alias)

*   remember: the two sub-selects, for ANY of these three operations,
    need to be UNION-compatible (same number of columns, whose types are
    compatible)

    *   CS 325 course STYLE:
        *   we WILL write each of the sub-selects for a union, intersect, or minus
	    within a set of parentheses

        *   we will make sure the domains of the columns involved are also "mean"
	    the same thing (even though SQL can really only check for compatible types)

         *   IF you are ordering the result of a union, intersect, or minus,
	     then it should go AFTER the second sub-select operand,
	     AFTER its closing parenthesis (the overall union, intersect, or minus
	     is the "outer" select, in this case)