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ステートメントの選択リストを左から番号振ってるのね。