集合演算子とは
SELECT文で取得した結果を、複数結合して取得するのが「集合演算子」です。
集合演算子は以下の4つが存在します。
集合演算子 | 説明 |
UNION | 2つの取得結果のうち、重複したデータを削除して結合し取得する |
UNION ALL | 2つの取得結果のうち、重複したデータを含めて結合し取得する |
INTERSECT | 2つの取得結果のうち、重複したデータだけ結合し取得する |
MINUS | 2つの取得結果のうち、2つ目の結果にないデータだけを取得する |
使い方は以下の通りです。
SELECT ~
集合演算子 SELECT ~ |
SELECT 氏名,性別,年 FROM "学生" WHERE 性別 = '男' AND 年 = 1 UNION SELECT 氏名,性別,年 FROM "学生" WHERE 性別 = '女' AND 年 = 2
2つのSELECT文の間に集合演算子を入れるだけ。特に難しいことはありませんが、集合演算子を使うにはいくつかの条件があります。
- 結合するデータは同じ列数でなければなれない
- それぞれの列は結合される列ごとに同じデータ型でなければならない
- ORDER BY句は最後のSELECT文に書き、最初のSELECT文の列を指定しなくてはいけない
2番目の条件は、例えば「氏名」と言う文字列型と「年」と言う数値型の列を結合しようとすると下記エラーとなります。
3番目の条件は、以下の通りです。
これを、最初の列名に変更すればエラーは起きません。
↑の例を見てわかると思いますが、結合するデータの列は型があっていれば列名が異なっていても構いません。
以下に、集合演算子の特徴をご紹介します。
- 結合結果の列名は、最初のSELECT文に使われている列名が使用される
- ORDER BY句を使用しなければ、最初のSELECT文の列順にソートされる
- UNION ALLはORDER BY句を使用しない限り自動でソートはされない
- 集合演算子は複数・複数種類使うことが可能
- 集合演算子の優先順位は同じだが、カッコ()で囲えば明示的に優先順位を決められる
集合演算子は条件や特徴が多いため最初は戸惑うかもしれませんが、自分なりに色々と試してみましょう。それが集合演算子を使いこなす一番の近道だと思います。
次回は、集合演算子の具体的な使用例をご紹介していきます。