SSブログ

クエリ UNIONの詳細 [クエリ]

 UNIONを利用すると、複数のSELECTの結果を結合して、一つにまとめられた結果として受け取ることができます。

 記述方法は、結合したいSQLの間に、「UNION」を記述します。

SELECT * FROM Q明細
UNION ALL 
SELECT * FROM Q合計

 上記の例は、2つのSELECTを結合していますが、もちろんそれ以上のSELECTを結合することもできます。
 SELECT … UNION SELECT … UNION SELECT … UNION SELECT
 と、言う具合に、間にUNIONを挟んで記述していきます。

・「UNION」と「UNION ALL」
 UNIONは「ALL」を指定することができます。

 「ALL」を指定しなかった場合、全体のレコードのうち、まったく内容が同じ(すべての項目の内容が一致している行)場合、1件にまとめられます。
 「ALL」を指定した場合、上記のようなレコードがあっても、別々にレコードが表示されます。

 場合によっては、「ALL」なしの動作が都合が良い場合もあるかと思いますが、UNIONした結果を合計集計する場合などは、結果が違ってきますので、「ALL」の指定が必要です。
 後でバグを引き起こさないためにも、「ALL」は必ず書くようにすることをお勧めします。
 他の人が修正する場合に、混乱を招かないように、重複行を省く目的で「ALL」が必要ない場合でも、「GROUP BY」で明確に行った方が良いと思います。


 こういうデータで、

SELECT 商品名 FROM T売上A
UNION
SELECT 商品名 FROM T売上B

 上記SQLを実行すると、

 こういう結果になります。
 両方のテーブルに存在していた「みかん」は、1件になっています。

SELECT 商品名 FROM T売上A
UNION ALL
SELECT 商品名 FROM T売上B

 「ALL」を付けた場合は、

 このように、それぞれのレコードが表示されます。

・項目の並べ方
 すべてのSELECT文で、項目の数を一致させておく必要があります。
 各SELECT文の項目数が一致していない場合、エラーになります。
 また、各項目の属性(文字・数値)も、あわせておいた方が良いです。
 属性は基本的に自動で変換されますが、予想外の結果にならないよう、注意が必要です。

 結果に表示される項目名は、一番最初のSELECT文の項目名が採用され、2番目以降のSELECT文の項目名は使われません。
 逆に言えば、項目名は各SELECT文で一致している必要はありません。

・ORDER BY(並べ替え)の指定
 ORDER BY句は、一番最後のSELECT文にのみ指定可能です。
 ただし、記述する項目名は、一番最初のSELECT文の項目名です。

SELECT  商品名1,金額1  FROM T売上1
UNION ALL
SELECT 商品名2,金額2   FROM T売上2
ORDER BY 商品名1

 このようになります。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。
※URL(リンク)は記述できません。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。