INTERSECT computes the set intersection between the result sets of two query blocks. Note that query blocks can be nested,
and can in turn be comprised of nested SELECT statements or the set operators UNION, EXCEPT, or INTERSECT. Specifying INTERSECT
alone is equivalent to specifying INTERSECT DISTINCT.
INTERSECT ALL implements bag intersection rather than set intersection. For example, if the first query-block contains 5 (duplicate) rows with specific values, and the second query-block contains 3 duplicate rows with identical values to the first, then INTERSECT ALL will return 3 rows.
The results of INTERSECT are the same as INTERSECT ALL if either query-block does not contain duplicate rows.
The two query-block result sets must be UNION-compatible; they must each have the same number of items in their respective SELECT lists, and
the types of each expression should be comparable. If corresponding items in two SELECT lists have different data types, SQL
Anywhere chooses a data type for the corresponding column in the result and automatically convert the columns in each query-block appropriately.
The column names displayed are the same column names that are displayed for the first query-block and these names are used to determine the expression names to be matched with the ORDER BY clause. An alternative way of
customizing result set column names is to use a common table expression (the WITH clause).
INTERSECT is optional SQL language feature F302 of the SQL/2008 standard. Explicitly specifying the DISTINCT keyword
with INTERSECT is optional SQL language feature T551. Specifying an ORDER BY clause with INTERSECT is SQL language feature
F850. A query-block that contains an ORDER BY clause constitutes SQL/2008 feature F851. A query block that contains a row-limit clause (SELECT
TOP or LIMIT) comprises optional SQL language feature F857 or F858, depending on the context. The FOR XML and OPTION clauses
are vendor extensions.
INTERSECT is not supported by Adaptive Server Enterprise. However, both INTERSECT ALL and INTERSECT DISTINCT can be used
in the Transact-SQL dialect supported by SQL Anywhere.