現在勉強しているオラクルマスターブロンズ(SQL)についてまとめたものです。
自分のアウトプット用なので見やすさなどは期待しないでください。
集合演算子の種類と使用方法
集合演算子を使用すると、複数の問い合わせの結果を1つにまとめることができ、集合演算子を含む問い合わせのことを複合問い合わせと呼ぶ。
集合演算子の種類
集合演算子 | 説明 |
---|---|
UNION | 2つの問い合わせ結果を連結し、重複した行を排除して戻す。 内部的にデータをソートしたうえで重複した行を排除するため、、実行結果もSELECT句の先頭に指定されている列の値で昇順にソートされる。 |
UNION ALL | 2つの問い合わせ結果を連結し、重複した行も含めて戻す。 データのソート処理を行わない為、問い合わせ結果は、明示的にORDER BY句を指定した場合を除き、1つ目の問い合わせ結果の後ろに2つ目の問い合わせの結果を追加したものになる。 |
INTERSECT | 2つの問い合わせ結果のうち、共通する行だけを戻す。 UNION演算子と同様に内部的にデータをソートしたうえで重複した行を排除するため、、実行結果もSELECT句の先頭に指定されている列の値で昇順にソートされる。 |
MINUS | 1つ目の問い合わせ結果のうち、2つ目の問い合わせ結果にない行を戻す。 UNION演算子と同様に内部的にデータをソートしたうえで重複した行を排除するため、、実行結果もSELECT句の先頭に指定されている列の値で昇順にソートされる。 |
UNION演算子やUNION ALL演算子、INTERSECT演算子を使用している場合は、1つ目の問い合わせと2つ目の問い合わせの順番を入れ替えても同じデータが表示されるが、MINUS演算子を使用している場合は、表示されるデータが変わる。
集合演算子の使用に関するガイドライン
複合問い合わせでは、1つ目の問い合わせと2つ目の問い合わせで、SELECT句に指定する列の個数を同数にする必要がある。
また、2つ目の問い合わせのSELECT句に指定する列のデータ型は、1つ目の問い合わせのSELECT句に指定されている列のデータ型と同じか、同じデータ型のグループ(文字値や数値、日付値といった同種のデータを扱うデータ型のグループ)である必要がある。
なお、それぞれに指定する列の名前は異なっていてもかまわないが、その場合、問い合わせ結果の列見出しには、1つ目の問い合わせに指定されている列名が使用される。
複合問い合わせの場合はORDER BY句の使用にあたって次の条件がある。
- ORDER BY句は、複合問い合わせの最後の問い合わせに指定する必要がある。
- ORDER BY句には、最初の問い合わせのSELECT句に指定されている列または列別名を指定する必要がある。
複合問い合わせでは、NULL値は無視されず、UNION ALL演算子以外の複合演算子を使用した場合、重複したNULL値は排除される。
集合演算子の優先順位はすべて同じなため、1つのSQL文に複数の集合演算子を使用した場合は、前に指定されている複合問い合わせから順番に実行される。
ただし、**()**を使用して優先順位を明示的に指定することもできる。