JavaScriptが無効になっています。
この状態では一部の情報が表示されず、すべての機能を利用することができません。
INTERSECT 集合演算子
INTERSECT 演算子は複数の SELECT 文を1つに組み合わせて 重複のない積集合 (積となる結果セット)を戻す演算子である。
複数の問い合わせを1つに結合することから、それぞれの問い合わせの抽出項目のリストは同数、かつ、同じグループの データ型 でなければ結合することができないのは UNION [ALL] と同様である。
但し、UNION には重複行を含める ALL 指定があるが INTERSECT にはない。つまり、ある表に同じ行セットが2つ、もう一方にまったく同じ行セットが1つあった場合でも戻される行セットは1つに集約される。
簡単な INTERSECT のサンプル
INTERSECT
INTERSECT:2つの問い合わせ結果のレコードが 同じ内容であった場合、重複行は削除して 結果にする (≒ DISTINCT )
SELECT 1, 2 FROM DUAL
UNION
SELECT 2, 3 FROM DUAL
INTERSECT
SELECT 1, 2 FROM DUAL ;
1 2
---------- ----------
1 2
SQL の内容: レコード [1 , 2] と [2 , 3] が UNION された後に [1 , 2] を INTERSECT している
⇒ 集合演算子のルールと制限
INTERSECT できない例
項目数の不一致
SELECT 1, 2 FROM DUAL
INTERSECT
SELECT 1, 2, 3 FROM DUAL ;
-- リストの項目数が合わない
行1でエラーが発生しました。:
ORA-01789: 問合せブロックにある結果の列数が正しくありません
データ型の不一致
SELECT 1 FROM DUAL
INTERSECT
SELECT SYSDATE FROM DUAL ;
-- 数値と日付を INTERSECT
行1でエラーが発生しました。:
ORA-01790: 式には対応する式と同じデータ型を持つ必要があります
INTERSECT した後の並び替え
INTERSECT 結合した後でデータを並び替えるときに困っている場合には項目別名を使用すると良い。
(注意) それぞれの問い合わせで異なる別名を付けているだけではエラーにならないが最初の別名だけが有効で
2番目の別名は使用できない。
SELECT 'あいう' "ONE" , 'さしす' "TWO" FROM DUAL
INTERSECT
SELECT 'あいう' "ONE_ONE" , 'さしす' "TWO_TWO" FROM DUAL
ORDER BY ONE, TWO ;
...
結果省略
SELECT 'あいう' "ONE" , 'さしす' "TWO" FROM DUAL
INTERSECT
SELECT 'あいう' "ONE_ONE" , 'さしす' "TWO_TWO" FROM DUAL
ORDER BY ONE_ONE, TWO_TWO ;
行4でエラーが発生しました。:
ORA-00904: "ONE_ONE" : 無効な識別子です。
SELECT 'あいう' , 'さしす' FROM DUAL
INTERSECT
SELECT 'あいう' "ONE" , 'さしす' "TWO" FROM DUAL
ORDER BY ONE, TWO ;
ORA-00904: "ONE" : 無効な識別子です。
関連事項