SQL server Management Studio の使い方
以下の書籍を参照しました。
SQL Server 2008の教科書
松本美穂 松本崇博 ソシム株式会社 2009
【使用テーブル】
++ 果物 ++
AID 名前 入り数 BID
1 イチゴ 30 10
2 りんご 12 10
3 みかん 15 20
4 さくらんぼ 50 10
5 マンゴー 15 10
++ 色 ++
BID color
10 赤
20 黄
30 緑
■UNION ALL
このうち、AID=1のイチゴの行だけ抽出した場合、
select * from 果物 where AID =1
ってするとよいです。
じゃ、AIDが「1」と「2」のものを抽出する場合は??
select * from 果物 where AID =1 or AID =2 でも
select * from 果物 where AID in (1,2) でも
select * from 果物 where AID =1
union all
select * from 果物 where AID =2
でも表示できます。
■UNION
では、抽出結果に重複がある場合、
例えば、AIDが「3」で、入り数が15の物を表示させたい場合は??
select * from 果物 where AID = 3
union all
select * from 果物 where 入り数 = 15
だと、結果は
AID 名前 入り数 BID
3 みかん 15 20
3 みかん 15 20
5 マンゴー 15 10
って、結果に重複ができてしまいますよね。
この場合は、
select * from 果物 where AID = 3
union
select * from 果物 where 入り数 = 15
ってしてあげると、
AID 名前 入り数 BID
3 みかん 15 20
5 マンゴー 15 10
となり、ほしい結果が得られます。
※UNIONは、重複行を排除する分、パフォーマンスが下がるので
できるだけUNION ALLを使うほうがいいみたい。
■UNION と ORDER BY
UNIONで連結したとき、ORDER BYが使えるのは、
はじめのSELECTステートメントに対してのみ。
あまり、実用的ではない気がするんだけど、
UNIONって、列名が違っていても、データ型と列数が同じならば
特にエラーが出ないとのことなので、以下の例で見ていきます。
select AID, 名前 from 果物
union all
select BID,color from 色
これって、
果物テーブルの「AID」と「名前」
色テーブルの「BID」と「color」を
いっしょくたに表示させてください、って言ってるのね。
こんな感じ。
AID 名前
1 イチゴ
2 りんご
3 みかん
4 さくらんぼ
5 マンゴー
10 赤
20 黄
30 緑
でだ、これにORDER BYを使う場合は、
果物テーブルの「AID」か「名前」に対してのみですよ、ってこと。
書き方は、
select AID, 名前 from 果物
union all
select BID,color from 色
order by AID
「order by AID」は、「order by 1」とも記述できて、
「order by 名前」は、「order by 2」とも記述できる。
つまり、はじめのSELECTステートメントの選択リストを左から番号振ってるのね。