Outdated Version

You are viewing an older version of this section. View current production version.

INTERSECT

INTERSECT combines the result set of two queries and returns distinct rows that are returned by both queries. When combining two results sets using INTERSECT, the data types must be compatible and the number and order of the columns should match across queries.

Syntax

SELECT ...
INTERSECT
SELECT ...

Arguments

Accepts two or more queries that return data of comparable data types.

Remarks

In addition to being able to be used in queries, INTERSECT can also be used in subqueries and common table expressions (CTEs).

The column names of the returned result set are the same as the column names returned by the query on the left side of the operator.

If using ORDER BY, column names must match those returned by the left-side query.

Examples

The following example demonstrates how to combine two result sets using INTERSECT:

memsql> create table t(a int, b varchar(30));

memsql> create table s(a int, b varchar(30));

memsql> insert into t values (1, "x"), (2, "y"), (3, "z");

memsql> insert into s values (1, "x"), (2, "y"), (4, "q");

memsql> select * from t
    -> intersect
    -> select * from s;
+------+------+
| a    | b    |
+------+------+
|    1 | x    |
|    2 | y    |
+------+------+
2 rows in set (0.74 sec)

The following example shows how to use INTERSECT with a CTE:

memsql> with mycte(a, b) as (select * from t intersect select * from s) select a, b from mycte;
+------+------+
| a    | b    |
+------+------+
|    1 | x    |
|    2 | y    |
+------+------+

The following example shows how to combine three result sets with INTERSECT:

memsql> create table t2(a int, b varchar(30));

memsql> insert into t2 values (1, "x"), (8, "y"), (13, "q"), (2, "y");

memsql> select * from t
    -> intersect
    -> select * from s
    -> intersect
    -> select * from t2;
+------+------+
| a    | b    |
+------+------+
|    1 | x    |
|    2 | y    |
+------+------+

Related Topics