SQL server Management Studio の使い方

以下の書籍を参照しました。
SQL Server 2008の教科書
松本美穂 松本崇博 ソシム株式会社 2009



【SQLステートメントの基本:その他のSQL92規格】
「DISTINCT」、「サブクエリ」、「CASE式」

■重複データの排除(DISTINCT)


重複したデータを排除して表示
 
select distinct 列名 from テーブル名

このままだとなんのこっちゃサッパリなので

++ テーブルA ++

AID 名前 BID
1  イチゴ 10
2  りんご 10
3  みかん 20

があったとして、

select distinct BID from テーブルA

と記述すると、

BID
10
20

とだけ表示されます。
選択リスト「BID」が表示され、
さらに重複データが省かれています。




■サブクエリ(副問い合わせ)


++ テーブルA ++

AID 名前 入り数 BID
1  イチゴ  30  10
2  りんご  12  10
3  みかん  15  20
4  さくらんぼ 50 10

っていうのがあったとして、

select MAX(入り数) as 入り数MAX from テーブルA

ってすると、もちろん入り数が一番多いさくらんぼのデータが出てくるよね。
こんな感じ

入り数MAX
50


じゃ次。
select MAX(名前) from テーブルA

ってすると、どうなるか。
文字列のMAXは、「Shift-JISコード」の一番大きい値を引っ張るんだって。
この例の場合は、「りんご」になるらしく、以下の通り。

(列名なし)
12

でもさー、MAXの値だけじゃなくて、それが何に紐付く値なのか知りたいじゃない?
そう思って、

select MAX(名前),MAX(入り数) from テーブルA

なんて記述したらどうなるか!?

(列名なし) (列名なし)
りんご    50

なんて、変な結果が出てきちゃうじゃないの!
りんごの入り数は12個だし、50個入ってるのはさくらんぼだし・・・


ここで登場するのが、「サブクエリ」
最初は表示させたい列名を列挙させといて、
where句でselect文を入れ子にしちゃう、と。

select * from テーブルA
where 入り数 = (select MAX(入り数) from テーブルA)

そうすると、こんな結果が返ってきます。

AID 名前 入り数 BID
4  さくらんぼ 50 10

入り数 = (select 最大) のほかにも
入り数 > (select 平均) とかもできるし。