INTERSECT 操作

INTERSECT 操作 (積結合操作) では、2 つ以上の入力クエリ結果に共通のエレメントが返されます。

この操作の構文を以下に示します。

INTERSECT 操作の構文
<query 1> INTERSECT <query 2> [ INTERSECT <query N> INTERSECT <query
N+1> ]

たとえば、以下の内容を持つ 3 つのビューがあるとします。

view_a

a

b

1

x

2

b

4

d

view_b

col_1

col_2

1

a

2

z

6

f

view_c

col_a

col_b

1

a

2

b

5

e

このクエリを実行します。

SELECT *
FROM (
    SELECT a
    FROM view_a

    INTERSECT

    SELECT col_1 AS a
    FROM view_b

    INTERSECT

    SELECT col_a AS a
    FROM view_c
    )

その結果は以下のようになります。

<query>

a

1

2

3 つのクエリ結果に共通の行が、このクエリの結果になります。INTERSECT 操作では、各ビューの内容ではなく、各クエリの結果が考慮されます。

INTERSECT クエリに使用するクエリは、以下の規則に従っている必要があります。

  • どの入力クエリも同じスキーマを返す必要があります。つまり、すべての入力クエリの結果に、同じ名前で同じ数のフィールドが存在する必要があります。

  • 括弧 () を使用すると、積結合の実行順序を指定できます。この順序によってクエリの結果が異なることはありませんが、そのパフォーマンスは大幅に変化することがあります。

    たとえば、クエリが <query 1> INTERSECT <query 2> INTERSECT <query 3> の場合は、まず <query 1><query 2> との積結合が実行され、つづいてその中間結果と <query 3> との積結合が実行されます。

    クエリが <query 1> INTERSECT (<query 2> INTERSECT <query 3>) の場合は、まず <query 2><query 3> との積結合が実行され、つづいてその中間結果と <query 1> との積結合が実行されます。