INTERSECT 操作¶
INTERSECT 操作 (積結合操作) では、2 つ以上の入力クエリ結果に共通のエレメントが返されます。
この操作の構文を以下に示します。
<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>
との積結合が実行されます。