CHAPTER 1 · 16 LESSONS · 195 問

取り出す・絞り込む

表から欲しい列を選び、条件に合う行だけを取り出す。データを読む力の土台。

アプリを閉じても、書いた内容が残っている。あたりまえに感じるけれど、これは誰かがどこかにデータを保存しているということだよ。その保存場所が データベース で、そこに話しかけるための言葉が SQL だ。

SQL には、これまで学んだプログラミング言語と大きく違うところがある。「どうやるか」ではなく「何がほしいか」を書くという点だよ。JavaScript なら「配列を先頭から順に見て、条件に合うものを別の配列に入れて…」と手順を書いた。SQL では「この条件に合う行がほしい」とだけ書く。取りに行く手順はデータベースが考えてくれる。

データの入れ物は テーブル、つまり表だ。方眼紙のような形をしていて、たての並びを カラム(列)、よこの並びを レコード(行) と呼ぶ。本のデータなら、カラムは「タイトル」「著者」「ページ数」、レコードは本1冊ぶん。どのレコードも同じカラムをそろえて持っている、というのが表の強みだよ。

この章で覚えるのは、大きく3つの操作だ。

  • 選ぶ — 表のどのカラムを見たいか
  • 絞る — どの条件に合うレコードだけを見たいか
  • 並べる — どの順に見せてほしいか

この3つを組み合わせるだけで、「著者が○○の本を、ページ数の多い順に、タイトルだけ表示する」といった問いに答えられるようになる。書き方は英語の文に近くて、慣れると読み下せるようになるよ。

絞り込みの条件は、等しい・大きい・小さいといった比較のほか、「○○を含む」というあいまいな一致や、「AかつB」「AまたはB」の組み合わせもできる。ここは JavaScript の条件分岐と発想が同じなので、すんなり入るはずだ。

ひとつ気をつけたいのが、値が入っていない状態の扱いだよ。SQL では「まだ何も入っていない」ことを特別な値で表し、これは0でも空文字でもない。普通の比較では引っかからないので、専用の書き方が要る。ここは初学者が必ず一度はまるところだ。

この章は SQL のすべての土台になる。この先で出てくる集計もテーブルの結合も、「選んで、絞って、並べる」の上に乗っているだけだよ。ここを固めておこう。

書き方の作法もここで身につけておこう。SQL は大文字と小文字を区別しないけれど、命令の部分を大文字で書くのが慣習だよ。そうすると、命令とテーブル名・カラム名が目で区別できる。長いクエリになるほど効いてくるので、最初からその形で書く癖をつけておくといい。

行の終わりに ; を付けるのも忘れずに。「ここまでが1つの命令」という区切りの合図だよ。付け忘れると、データベースは「まだ続きがあるのかな」と待ってしまう。

もうひとつ、SQL には結果の順番が保証されないという性質がある。並べ替えを指定しなければ、どの順で返ってくるかは決まっていない。たまたま思ったとおりに並んで見えても、それはたまたまだ。順番が意味を持つなら、必ず並べ替えを書こう。

JavaScript を先に学んだ人は、取り出した結果もまた表であるという点を意識しておくといい。1件だけ取り出しても、返ってくるのは「1行の表」だ。この感覚があると、後の章で結果をさらに絞ったりつないだりする話がすんなり入ってくるよ。

なお、この教材の SQL はあなたのスマホの中で動いている。書いたクエリがどこかのサーバーに送られることはないので、思いきり試して大丈夫だよ。エラーもたくさん出していい。データベースは書きまちがえたクエリに対して、どこがおかしいかをちゃんと教えてくれる。その読み方に慣れるのも、この章でやっておきたいことのひとつだよ。

この章のレッスン

選ぶ・絞る・並べる

  1. 01データベースをのぞいてみるデータベースは表のあつまり。SELECT * で表の中身をまるごと見てみよう。 問題へ
  2. 02ほしい列だけを取り出すSELECT のうしろにカラム名を書いて、必要な1列だけを取り出そう。 問題へ
  3. 03列を並べて取り出すカラム名をカンマで並べて、必要な列だけをまとめて取り出そう。 問題へ
  4. 04条件に合う行だけWHERE を書いて、条件に合うレコードだけを取り出そう。 問題へ
  5. 05文字を条件にする文字列の条件はシングルクォートで囲む。数値との書き分けを覚えよう。 問題へ
  6. 06大きい・小さいで絞る> < >= <= <> を使って、等しい以外の条件で行を絞ろう。 問題へ
  7. 07ふくむ言葉でさがすLIKE と % を使って、その言葉をふくむレコードを探そう。 問題へ
  8. 08はじまり・おわりでさがす% を置く場所を変えて前方一致・後方一致にし、NOT LIKE で当てはまらないものを取ろう。 問題へ
  9. 09条件をひっくり返すNOT を条件の前に置いて、当てはまらない行だけを取り出そう。 問題へ
  10. 10空っぽの値をさがすNULL は比較では見つからない。IS NULL / IS NOT NULL で有無を調べよう。 問題へ
  11. 11条件を組み合わせるAND で「かつ」、OR で「または」。2つ以上の条件で絞り込もう。 問題へ
  12. 12好きな順に並べるORDER BY で結果を並び替えよう。DESC を付ければ大きい順になる。 問題へ
  13. 13上から何件かだけLIMIT で取り出す件数を決めよう。ORDER BY と組み合わせれば上位◯件になる。 問題へ
  14. 14取り出す・絞り込む 総合演習章のまとめ。基礎問題はなく、練習10問でここまでの書き方を組み合わせて解こう。 問題へ
  15. 15はじめてのSQLSELECT文でデータベースからデータを取り出してみよう。 問題へ
  16. 16WHEREで絞り込もう条件に合うレコードだけを取り出す WHERE を身につけよう。 問題へ

つぎは「集める・数える」。合計・平均・件数を出し、グループごとにまとめる。データから傾向を読む書き方。