読み方 : インターセクトく

INTERSECT句

概要

INTERSECT句とは、SQLの集合演算子の一つで、2つのSELECT文の検索結果に共通して存在する行のみを取り出すもの。数学の集合論における「積集合」(共通部分)に相当する操作を、データベースクエリ上で実現するための構文である。
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 DatabaseSQL ServerPostgreSQLなどでは以前から標準的にサポートされている一方、MySQLでは長らくサポートされておらず、2022年リリースのバージョン8.0.31以降でEXCEPT句と共にようやく利用可能となった。

この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。