Oracle Databaseでは、UNION 演算子を使用すると、2つのクエリの結果を1つの結果セットに結合できます。
次のテーブルがあるとします。
SELECT * FROM Teachers;
SELECT * FROM Students; 結果:
| TEACHERID | TEACHERNAME |
|---|---|
| 1 | ウォーレン |
| 2 | ベン |
| 3 | キャシー |
| 4 | キャシー |
| 5 | 請求書 |
| 6 | 請求書 |
| STUDENTID | 学生名 |
|---|---|
| 1 | フェイ |
| 2 | ジェット |
| 3 | スパイク |
| 4 | アイン |
| 5 | ウォーレン |
| 6 | 請求書 |
UNIONの使用例を次に示します。 すべての教師と生徒の名前を返す演算子:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students; 結果:
| TEACHERNAME |
|---|
| ベン |
| 請求書 |
| キャシー |
| Ein |
| フェイ |
| ジェット |
| スパイク |
| ウォーレン |
デフォルトでは、UNION 演算子は暗黙的にDISTINCTを適用します 手術。つまり、デフォルトでは個別の値のみを返します。したがって、上記の結果には、ウォーレン、キャシー、ビルがそれぞれ1つずつ含まれています。これは、結合されたテーブルに実際に2つのウォーレン、2つのキャシー、および3つのビルが含まれているという事実にもかかわらずです(キャシーと呼ばれる2人の教師、ウォーレンと呼ばれる教師と顧客、およびビルと呼ばれる2人、およびビルと呼ばれる1人の学生がいます)。
ALLを使用できます 結果に重複する値を含めるキーワード:
SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students; 結果:
| TEACHERNAME |
|---|
| ウォーレン |
| ベン |
| キャシー |
| キャシー |
| 請求書 |
| 請求書 |
| フェイ |
| ジェット |
| スパイク |
| Ein |
| ウォーレン |
| 請求書 |
今回は、最初の例で取得した8行ではなく、12行を取得しました。
キャシーの両方が返還され、3つの請求書すべてが返還されたことがわかります。
式の数は一致する必要があり、同じデータ型グループに含まれている必要があることに注意してください。したがって、次のことはできません。
SELECT TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students; 結果:
ORA-01789: query block has incorrect number of result columns
またはこれ:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students; 結果:
ORA-01790: expression must have same datatype as corresponding expression
ただし、TO_CHAR()のような関数を使用できます 列を適切なデータ型グループに変換するには:
SELECT TeacherName FROM Teachers
UNION
SELECT TO_CHAR(StudentId) FROM Students; 結果:
TEACHERNAME 1 2 3 4 5 6 Ben Bill Cathy Warren