STAGE 02 — 2-2 / SELECTの基本

列を選んで取り出す

考えてみよう

アマテラスの司令官から「乗組員の“名前”と“役職”だけ確認したい、給与とか年齢は今はいらない」と頼まれました。前回の SELECT * FROM crew; のままで応えられるでしょうか?

* はすべての列を持ってきてしまいます。今回のように「必要な列だけ」が欲しいときは、* の使いどころではありません。SELECT句の書き方を、少しだけ変えてみましょう。

必要な列だけを名指しする

* の代わりに、欲しい列の名前を直接書くことができます。名前と役職だけを取り出したいときは、こう書きます。

SELECT name, role FROM crew;

結果はこうなります。

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

agehomesalary も、結果には現れていません。SELECT句にカンマ区切りで並べた列だけが返ってくる、というのが基本のルールです。列が1つだけ欲しければ、SELECT name FROM crew; のようにカンマなしで1つだけ書けば十分です。

列は「書いた順番」で返ってくる

もうひとつ大事なポイントがあります。結果に並ぶ列の順序は、テーブルでの元の並び順ではなく、SELECT句に書いた順番になるということです。

先ほどとは逆に、役職を先に書いてみましょう。

SELECT role, name FROM crew;

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

crew テーブルでは name の方が role より左にありますが、結果では role が先頭に来ています。SELECT句は「テーブルの並びをそのまま出す」のではなく、「この順番で見せてほしい」という自分の希望を伝える場所なのです。

なぜ「必要な列だけ」取るのか

「どうせ全部見えるなら * でいいのでは?」と思うかもしれません。しかし、実際の現場では、必要な列だけを指定することがとても大切にされています。

理由は主に2つあります。ひとつは読みやすさ。結果に不要な列が並んでいると、本当に見たい情報が埋もれてしまいます。もうひとつは効率。テーブルの列が数十個もあるような大きなシステムでは、使わない列まで毎回取り出すと、それだけ余計な時間がかかってしまいます。

「今、本当に必要な情報は何か」を考えて列を選ぶ——これは、SQLを書くうえでの基本の姿勢として、ここでしっかり身につけておきましょう。

確認問題

SELECT role, name FROM crew; を実行すると、結果の列はどんな順番で並ぶでしょう?

答えを見る

role が先、name が後という、SELECT句に書いた順番で並びます。crew テーブル自体での列の並び順とは関係ありません。SELECT句は「見せてほしい順番」を自分で指定できる場所です。

* と、列を名指しする書き方、両方の感覚をSQL DIVERで確かめてみましょう。SELECT name, role FROM crew;SELECT age, home FROM crew; など、組み合わせを変えて何度もタイプしてみるのがおすすめです。

ゆみちゃん
ゆみ

* は「全部」、列名を並べれば「それだけ」。しかも並び順は自分で決められる——地味だけどよく使う技だよ。次は、重複を消したり、列に別名をつけたりする方法を見ていこう!