SQLのUNIONで重複行を残す方法は?
UNION ALLってどんなときに使うの?
わかりやすく教えてほしい!
こういった疑問にこたえます。
エンジニアの僕がわかりやすく解説します。
UNION ALLの使い方
UNIONはテーブルの足し算を行う集合演算子ですが、重複行を排除してしまいます。
重複行を排除しないようにするにはUNIONの後ろに「ALL」というオプションを付けるだけです。
例えば、次のようなshohinテーブルとshohin2テーブルがあったとします。
shohin_mei | shohin_bunrui | kakaku |
Tシャツ | 衣服 | 1500 |
フライパン | キッチン用品 | 2000 |
鉛筆 | 事務用品 | 100 |
ボールペン | 事務用品 | 150 |
shohin_mei | shohin_bunrui | kakaku |
Tシャツ | 衣服 | 1500 |
まな板 | キッチン用品 | 700 |
包丁 | キッチン用品 | 1000 |
この二つのテーブルを足し合わせた結果を得るには次のようなSQLを実行します。
SELECT shohin_mei, shohin_bunrui, kakaku
FROM shohin
UNION ALL
SELECT shohin_mei, shohin_bunrui, kakaku
FROM shohin2;
実行結果
shohin_mei | shohin_bunrui | kakaku |
Tシャツ | 衣服 | 1500 |
フライパン | キッチン用品 | 2000 |
鉛筆 | 事務用品 | 100 |
ボールペン | 事務用品 | 150 |
Tシャツ | 衣服 | 1500 |
まな板 | キッチン用品 | 700 |
包丁 | キッチン用品 | 1000 |
実行結果を見てみると、shohinとshohin2のテーブルどちらにも存在する「Tシャツ」のレコードは排除されず残っています。
このようにALLオプションを付けると重複行を残す形でUNIONすることが可能です。
UNION ALLの使い方まとめ
解説の内容をまとめます。
- UNIONで重複行を残したい場合、ALLオプションをつける
以上、お疲れ様でした。
コメント