Computes the intersection between the result sets of two or more queries.
[ WITH temporary-views ] query-block INTERSECT [ ALL | DISTINCT ] query-block [ ORDER BY [ integer | select-list-expression-name ] [ ASC | DESC ], ... ] [ FOR XML xml-mode ] [ OPTION( query-hint, ... ) ]
query-block : see Common elements in SQL syntax
query-hint : MATERIALIZED VIEW OPTIMIZATION option-value | FORCE OPTIMIZATION | option-name = option-value
option-name : identifier
option-value : hostvar (indicator allowed), string, identifier, or number
FOR XML clause For a description of the FOR XML clause, see SELECT statement.
OPTION clause Use this clause to specify hints for executing the statement. The following hints are supported:
OPTION( isolation_level = ... )
specification in the query text overrides all other means of specifying isolation level for a query.
For a description of these options, see OPTION clause, SELECT statement.
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).
Must have SELECT permission for each query-block.
None.
SQL/2008 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.
Transact-SQL 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.
For examples of INTERSECT usage, see Set operators and NULL.
Discuss this page in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |