読み方 : インターセクトく
INTERSECT句
概要

SQLには複数のSELECT文の結果を組み合わせる集合演算子として、すべての結果を統合する「UNION句」、共通部分のみを返す「INTERSECT句」、差分を返す「EXCEPT句」または「MINUS句」の3種類がある。INTERSECT句はこのうち、「両方のクエリ結果に同時に存在する行だけを取り出す」という操作を行う。
基本的な構文は、2つのSELECT文をINTERSECTキーワードでつなぐというものである。このとき、両方のSELECT文は同じ列数を持ち、対応する列のデータ型に互換性がなければならない。また、デフォルトで重複行を自動的に除去する動作となるため、両方のクエリに同一の行が複数存在していても結果には1行だけが返される。データベース製品によっては、「INTERSECT ALL」と指定することで重複を保持できる場合もある。
利用例として、2つの異なる期間の購買履歴テーブルから両方の期間に購入した顧客IDを抽出する場面が挙げられる。それぞれの期間の顧客IDを返すSELECT文をINTERSECT句でつなぐことで、両方に共通して存在する顧客IDのみを簡潔に取得できる。同様の結果はINNER JOIN句やWHERE EXISTS句を使った副問い合わせでも実現できるが、INTERSECT句を使うことでクエリの意図を直感的に表現できるという利点がある。
INTERSECT句の対応状況はデータベース製品によって異なり、Oracle DatabaseやSQL Server、PostgreSQLなどでは以前から標準的にサポートされている一方、MySQLでは長らくサポートされておらず、2022年リリースのバージョン8.0.31以降でEXCEPT句と共にようやく利用可能となった。