STAGE 02 — 2-3 / SELECTの基本

DISTINCTと別名(AS)

考えてみよう

SELECT role FROM crew; を実行すると、「研究員」「パイロット」「エンジニア」といった役職が、乗組員の人数ぶんだけ同じ言葉が何度も並びます。「アマテラスにはどんな役職の種類があるか」だけを知りたいとき、この結果は少し見づらくないでしょうか?

役職の「種類」が知りたいだけなら、同じ言葉が何度も並ぶ必要はありませんよね。SQLには、この「重複」をきれいに取り除いてくれる便利な仕組みがあります。

DISTINCTで重複を取り除く

まずは、重複ありのままの結果を見てみましょう。

SELECT role FROM crew;

role
エンジニア
パイロット
医師
医師
研究員
パイロット
エンジニア
研究員
エンジニア
パイロット

10人分の役職がそのまま並び、同じ役職が何度も繰り返されています。ここで DISTINCT を使うと、重複を1つにまとめてくれます。

SELECT DISTINCT role FROM crew;

role
エンジニア
パイロット
医師
研究員

10行あった結果が、種類の数である4行にまとまりました。DISTINCTはSELECTのすぐ後ろに1つ書くだけで使えます。「アマテラスにはどんな出身地があるか」を知りたければ SELECT DISTINCT home FROM crew; という具合に、列を変えて同じように使えます。

AS で列に別名をつける

次は、結果の見出し(列名)を分かりやすくする方法です。crew テーブルの列名は英語ですが、結果を表示するときに日本語の見出しをつけたいこともあります。そんなときは AS を使います。

SELECT name AS 名前, role AS 役職 FROM crew;

名前役職
ユミエンジニア
ケンジパイロット
サクラ医師
ハルト医師
レイ研究員
ミドリパイロット
ソラエンジニア
トウマ研究員
アカリエンジニア
リョウパイロット

見出しが namerole ではなく、名前役職 に変わっているのが分かりますか。AS は「これを、こういう名前で呼んでください」という別名(エイリアス)をつける命令です。もとの crew テーブルの列名自体が変わるわけではなく、その結果を表示するときだけの呼び名が変わる、という点に注意してください。

DISTINCTとASは、組み合わせて使うこともできます。

SELECT DISTINCT role AS 役職の種類 FROM crew;

このように書けば、「役職の種類」という分かりやすい見出しで、重複のない一覧を確認できます。

確認問題

SELECT DISTINCT role FROM crew;SELECT role AS 役職 FROM crew; は、それぞれ何をする命令でしょう?

答えを見る

DISTINCT は role の値の重複を取り除いて、種類だけを一覧にします。AS は role という列に「役職」という別名をつけて、結果の見出しを分かりやすくします。役割がまったく違う命令なので、混同しないようにしましょう。

DISTINCTで重複を消す感覚、ASで見出しを変える感覚——どちらもSQL DIVERで実際に打って確かめてみましょう。SELECT DISTINCT home FROM crew;SELECT age AS 年齢 FROM crew; のように、少しずつ書き方を変えて試すのがおすすめです。

ゆみちゃん
ゆみ

DISTINCTは「かぶりをなくす」、ASは「呼び名を変える」。似た見た目の命令が増えてきたけど、役割さえ覚えれば怖くないよ。次は、SELECT句の中で計算までしちゃう技を紹介するね!