集合演算子の制限とルール

集合演算子の優先順位

UNION、UNION ALL、INTERSECT および MINUS 演算子の優先順位は、論理演算子とは異なり順位はすべて同じ(※)。必要であればカッコで優先順位を決定する。

(※) 標準SQL では INTERSECT の優先順位が高いので今後変更される可能性がある。併用する場合にはカッコの使用を推奨する。

データ型の決定

各問合せの選択リストには互換性が必要であり、以下のルールで使用する型が選択される。

文字型の場合

  • 2つの選択項目の双方とも CHAR 型の場合
    • 双方で同じ長さであれば、その長さの CHAR を戻す
    • 同じ長さでない場合は、長い方の項目長を使用した VARCHAR2 を戻す(※1) 。Oracle 10g
  • どちらか一方でも VARCHAR2 の場合
    • 長い方(同一であれば同じ)の項目長を使用した VARCHAR2 を戻す

(※1) Oracle 10g R1 までのマニュアルでは CHAR 同士での長さについての記述はなく、CHAR 同士であれば CHAR を戻すとあるので前から VARCHAR2 型なのかもしれない。(未確認)

数値型の場合

Oracle 10g から BINARY_DOUBLE、BINARY_FLOAT が追加されているが、数値の型による優先順位に従って戻される。

数値の優先順位数値のデータ型
1BINARY_DOUBLE
2BINARY_FLOAT
3NUMBER
SQL> select to_binary_double(1.1) from dual union all select 1 from dual;
 
TO_BINARY_DOUBLE(1.1)
---------------------
             1.1E+000
             1.0E+000

型の暗黙変換

集合演算子においては属性(グループ)の異なる型の間では 暗黙変換 は発生せずにエラーとなる。

SQL> select to_binary_double(1.1) x from dual union all select '1' x from dual;
select to_binary_double(1.1) x from dual union all select '1' x from dual
       *
行1でエラーが発生しました。:
ORA-01790: 式には対応する式と同じデータ型を持つ必要があります
 


集合演算子の制限

  • BLOB、CLOB、BFILE、VARRAY、ネストした表、LONG に使用できない。
  • FOR UPDATE との併用はできない。
  • ORDER BY リストに関数を含んだ式は使用できない。(カラム別名を使用する)
  • テーブル式 を含む SELECT には使用できない。

関連事項

集合演算子のルールと制限の関連トピックス

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ 会員制(無料)の公式技術サイト