SQL INTERSECT

概要: このチュートリアルでは、SQL INTERSECT演算子について説明し、2つ以上のクエリの共通部分を取得する方法を示します。

SQL INTERSECT演算子の概要

INTERSECT演算子は、SELECTステートメントから得られる2つ以上の結果セットの重複しない行を返す集合演算子です。

例えば、A(1,2)とB(2,3)の2つのテーブルがあるとします。

次の図は、AとBのテーブルの共通部分を示しています。

SQL-INTERSECT-Operator

紫色の部分は、緑と青の結果セットの共通部分です。

UNION演算子と同様に、INTERSECT演算子は最終的な結果セットから重複する行を削除します。

次のステートメントは、INTERSECT演算子を使用して2つの結果セットの共通部分を見つける方法を示しています。

SELECT
	id
FROM
	a 
INTERSECT
SELECT
	id
FROM
	b;Code language: SQL (Structured Query Language) (sql)

INTERSECT演算子を使用するには、SELECTステートメントの列が次のルールに従う必要があります。

  • 列のデータ型は互換性がある必要があります。
  • SELECTステートメントの列数とその順序は同じでなければなりません。

SQL INTERSECT演算子の例

次のSELECTステートメントは、テーブルAから行を返します。

SELECT
	id
FROM
	A;Code language: SQL (Structured Query Language) (sql)
Table A data

そして、次のステートメントはテーブルBからデータを取得します。

SELECT
	id
FROM
	B;Code language: SQL (Structured Query Language) (sql)
Table B data

次のステートメントは、INTERSECT演算子を使用して両方のクエリの共通部分を取得します。

SELECT
	id
FROM
	a 
INTERSECT
SELECT
	id
FROM
	b;Code language: SQL (Structured Query Language) (sql)
SQL INTERSECT example

SQL INTERSECTとORDER BYの例

INTERSECT演算子によって返される結果セットをソートするには、すべてのステートメントの最後にORDER BY句を配置します。

例えば、次のステートメントは、INTERSECT演算子をAテーブルとBテーブルに適用し、結合された結果セットをid列で降順にソートします。

SELECT
	id
FROM
	a 
INTERSECT
SELECT
	id
FROM
	b
ORDER BY id DESC;Code language: SQL (Structured Query Language) (sql)
SQL INTERSECT with ORDER BY example

INNER JOIN句を使用したSQL INTERSECT演算子のエミュレート

ほとんどのリレーショナルデータベースシステムは、Oracle Database、Microsoft SQL Server、PostgreSQLなどのINTERSECT演算子をサポートしています。ただし、MySQLのようにINTERSECT演算子を提供しないデータベースシステムもあります。

SQL INTERSECT演算子をエミュレートするには、INNER JOIN句を次のように使用できます。

SELECT
	a.id
FROM
	a
INNER JOIN b ON b.id = a.idCode language: SQL (Structured Query Language) (sql)

これは、Bテーブルに一致する行を持つAテーブルの行を返し、INTERSECT演算子と同じ結果を生成します。

これで、SQL INTERSECT演算子を十分に理解し、複数のクエリの共通部分を見つけるためにそれを使用する方法を知っているはずです。

このチュートリアルは役に立ちましたか?