query1 and query2 are queries that can use any of the
features discussed up to this point. Set operations can also be
nested and chained, for example

query1 UNION query2 UNION query3

which really says

(query1 UNION query2) UNION query3

UNION effectively appends the result of
query2 to the result of
query1 (although there is no
guarantee that this is the order in which the rows are actually
returned). Furthermore, it eliminates all duplicate rows, in the
sense of DISTINCT, unless ALL is specified.

INTERSECT returns all rows that are
both in the result of query1 and
in the result of query2.
Duplicate rows are eliminated unless ALL is specified.

EXCEPT returns all rows that are in the
result of query1 but not in the
result of query2. Again,
duplicates are eliminated unless ALL is specified.

In order to calculate the union, intersection, or difference
of two queries, the two queries must be "union compatible", which means that they both
return the same number of columns, and that the corresponding
columns have compatible data types, as described in Section 5.5.