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