PostgreSQLでは、複数のクエリ結果に共通して存在する行を抽出したい場合、INTERSECT演算子を利用することができます。本記事では、INTERSECTの基本的な使い方と注意点をわかりやすく解説します。
INTERSECTの基本構文
INTERSECTは2つ以上のSELECT文の共通部分を抽出するために使用します。基本構文は以下の通りです。
SELECT column_list FROM table1
INTERSECT
SELECT column_list FROM table2;
この場合、両方のSELECT文で取得される列とデータ型が一致している必要があります。
具体例
例えば、従業員テーブルと契約テーブルの両方に存在する社員IDを抽出する場合は次のようになります。
SELECT employee_id FROM employees
INTERSECT
SELECT employee_id FROM contracts;
これにより、両方のテーブルに共通する社員IDのみが結果として返されます。
注意点と制限
1. SELECT文の列数とデータ型が一致している必要があります。
2. INTERSECTは自動的に重複を排除(DISTINCT)します。重複も含めたい場合は代わりにJOINを検討してください。
3. ORDER BY句はINTERSECT全体の最後に1回だけ指定可能です。
応用例:複数条件での共通抽出
複数列を条件に共通行を抽出することも可能です。
SELECT employee_id, department_id FROM employees
INTERSECT
SELECT employee_id, department_id FROM contracts;
この例では、社員IDと部署IDの両方が一致する行のみが抽出されます。
まとめ
PostgreSQLのINTERSECTを使うことで、複数のクエリ結果に共通する行を簡単に抽出できます。
列数やデータ型の一致、重複処理などの注意点を理解して使うことで、正確で効率的なデータ抽出が可能になります。


コメント