その「*」が、レポートを壊す
「書けなくてもSQLが読めるようになる方法」のレッスン 2 / 8・約6分
全部の列を返す「*」は便利ですが、使い回すと危ない書き方です。表から列を選ぶ、いちばん最初の書き方を身につけます。
このレッスンで学ぶこと
- 表・行・列の形
- 列の指名
レッスンの内容
会社の数字は、表に入っている
雑貨店「ハコ屋」の商品は products という1枚の表に入っています。横1列が商品1件の行、縦1列が価格などの列です。
先頭のidを使えば、同じ名前の商品も区別できます。
1行とは何か
問題:商品の表 products の「1行」が指しているのは、次のどれでしょうか。
- 商品1件ぶんの横一列(正解)
- 全商品の価格の縦一列
- 表の見出しの項目名
解説:行は1件分のまとまりです。1つの商品に関する情報が横に並んでいます。縦の並びは列と呼びます。
欲しい列だけを名指しする
商品名だけなら SELECT name FROM products。FROMで表を、SELECTで見たい列を名指しします。
読むのは表から。2列ならカンマで name, price。
商品名だけを取り出そう
ハコ屋の商品の表 products から、商品名 name の列だけを取り出します。列を指名する言葉を入れましょう。
___ name FROM productsSELECT の後ろに見たい列、FROM の後ろに表の名前を書きます。8件分の商品名だけが返ってきます。
全部見たいときの近道
列名の代わりに * と書くと全列が返ります。中身をサッと確かめる時に便利です。
ただ SELECT * FROM products を保存して使うのは危険です。実際に動かして試してみましょう。
列を選ぶと、文と表が一緒に変わる
列を選ぶと、SELECTの行と下の表が連動して変わります。最後に「列が増えた」を押し、* と名前指定の違いを比べてみましょう。
名前で書くと、壊れない
* は表に列が増えた際、勝手に結果も増えます。毎回のレポート表示がずれる原因になります。
列名で書けば安心です。PostgreSQLの公式文書でも本番での * は非推奨です。
○か✕か
○か✕か:全部の列を取り出す書き方は、表に新しい列が増えても結果が変わらないので安心して使える。
答え:✕。逆です。表に列が増えると結果も増えます。列名を書いておけば、列が増えても結果は変わりません。
この指示が返すもの
問題:商品が8件入っている products という表に、SELECT name, price FROM products と指示しました。返ってくるのはどれでしょうか。
- 8件ぶんの、名前と価格の2項目(正解)
- 1件ぶんの、名前と価格の2項目
- 8件ぶんの、すべての項目
解説:列を選んでも行の数は変わりません。表が横に細くなるだけなので、指定した2項目が全8件ぶん返ってきます。
名前と価格を並べよう
商品名に続けて、価格の列も取り出します。列の名前は price です。
SELECT name, ___ FROM products列はカンマで繋いで並べます。行の数は8件のまま、項目が2つに絞られます。
見出しに、伝わる名前を付ける
結果の見出しは通常 name などの列名ですが、AS でその場で付け替えられます。
SELECT name AS 商品名 FROM products としても、変わるのは見出しだけです。
見出しを日本語にしよう
結果の見出しを「商品名」に付け替えます。見出しに名前を付ける言葉を入れましょう。
SELECT name ___ 商品名 FROM productsAS の後ろの名前が見出しになります。元の列名は name のままです。
表と列を、自分で組み立てよう
商品の表から、商品名と価格を取り出します。列を指名する言葉と、表を指す言葉の両方を入れましょう。
___ name, price ___ productsSELECT で列、FROM で表を指定します。FROM の products から順に読むと、何の項目かが理解しやすくなります。
列の選び方
- データは表に入っていて、横が1件の行、縦が1項目の列
SELECT 列名 FROM 表名で見たい列を名指しする。行の数は変わらない*は表に列が増えた日に結果も増える。保存する文は名前で書くASで見出しだけを付け替えられる
仕上げの確認
問題:毎週おなじ形で提出するレポートを作ります。取り出す項目の書き方として安全なのはどれでしょうか。
- 見たい列の名前をひとつずつ書く(正解)
- 全部の列を取り出す書き方にしておく
- そのときどきで書き方を変える
解説:おつかれさまでした。名前で書いておけば、表に列が増えてもレポートの形は変わりません。ただ、ここまでは全件が返ってきています。次は「3000円以上だけ」のように行を絞ります。そこでは記号1つの違いで、ちょうど3000円の売上が結果から消えます。
用語
- AS(AS)
- 見出しに別名を付ける指定。元の表は変わりません。
- id(ID)
- 各行を見分ける番号。同名データも区別できます。
- 列(Column)
- 表の縦1列のこと。特定の項目が全件分並んでいます。
- 行(Row)
- 表の横一列。1件ぶんのデータ。
- 表(Table)
- データが入っている1枚の表。行と列で成り立っています。
- FROM(FROM)
- 見る表を指定する場所。
- SELECT(SELECT)
- 取り出す列を指定する命令。表示する項目を決めます。