- 8.1 集合演算子
集合演算子は、2つ以上の問合せ(複合問合せ)結果から1つの結果を生成するものである。
◆文1:SELECT * FROM X; ・・・B A A C の4行を戻す
◆文2:SELECT * FROM Y; ・・・B C の2行を戻す
◆文2:SELECT * FROM Y; ・・・B C の2行を戻す
【集合演算子の機能と例】
集合演算子 | 機能 | 重複 | ソート | 集合演算結果 | 最終結果 |
文1 UNION 文2; |
重複を含まない 全ての行 |
NO | YES | ①全ての行:B A A C B C ②ソート:A A B B C C ③重複を排除:A B C |
A B C |
文1 UNION ALL 文2 |
重複を含む全ての行 | YES | NO | ①全ての行 | B A A C B C |
文1 INTERSECT 文2 |
両方の問合せによって 戻される重複を 含まない全ての行 |
NO | YES | ①両方の問合せで戻さ れる全ての行:B C ②ソート:B C ③重複を排除:B C |
B C |
文1 MINUS 文2 |
文1と文2の結果の 差分で重複を含まない 全ての行 |
NO | YES | ①文1と文2の結果の 差分の全ての行:A A ②ソート:A A ③重複を排除:A |
A |
UNION ALL以外は重複処理、ソート処理を行う。 UNION ALLのみ重複処理、ソート処理を行わない。
【NULLの重複チェック】 ◆NULLも1つの値として扱われる。 ◆重複を排除する場合、複数のNULLは1つだけのNULLを戻す。 ◆ソートの場合はNULLは無限大と等しい。
- 8.2. 副問合せのSELECT句の規則
①データ型の種類の一致
各SELECT句の対応する列のデータ型の種類(文字列型、数値型、日付型など)は同じでなければならない。
各SELECT句の対応する列のデータ型の種類(文字列型、数値型、日付型など)は同じでなければならない。
×:CHAR(文字列型)とDATE(日付型) ○:CHAR(文字列型)とVARCHAR2(文字列型)
②選択する列の数
各SELECT句の選択リストの数は一致していないとエラーになる。
各SELECT句の選択リストの数は一致していないとエラーになる。
③列名
列名は異なっていても構わない。
【列名についての注意点】
◆1番目の問合せのSELECT句の列名または別名が、出力結果の列見出しとして使われる。
◆ORDER BY句に指定できる列名も、1番目の問合せのSELECT句の列名または列別名のみ。
列名は異なっていても構わない。
【列名についての注意点】
◆1番目の問合せのSELECT句の列名または別名が、出力結果の列見出しとして使われる。
◆ORDER BY句に指定できる列名も、1番目の問合せのSELECT句の列名または列別名のみ。
④列のサイズ
列のサイズは異なっていても構わない。
列のサイズは異なっていても構わない。
- 8.11 集合演算子の優先順位
- UNION、UNION ALL、INTERSECT、MINUSの優先順位は同じである。
- 左(上)から右(下)の順に評価される。
- カッコがあれば、カッコ内が優先される。