PRプログラミング

SQLの基本|SELECT・WHERE・ORDER BYで必要なデータを取り出す

データが増えると、必要な情報だけを探したり、条件に合う順で並べたりしたくなります。SQLは、データベースに対して問い合わせなどを行う言語です。最初は読むためのSELECTから始め、どんな結果になるかを予想して確かめましょう。

この記事では、架空の読書一覧を使って基本を紹介します。既存の業務データベースへ作成や変更を実行するための手順ではありません。サンプル表を用意できる練習環境で、問い合わせの結果を確認してください。

表・列・行の関係を整理する

この練習ではbooksという表があり、id、title、pagesの3列を持つとします。行は一冊ずつの記録です。まず項目の意味を読めるようにすると、何を取得するか、どの条件で選ぶかを考えやすくなります。

id | title    | pages
1  | 週末の読書 | 180
2  | 旅の記録   | 320
3  | 小さな習慣 | 240

上の3行を使うものとして、次の問い合わせを読みます。列名や表名は実際のデータベースごとに異なります。コードだけをコピーする前に、自分の練習環境の表と列を確認してください。例の本の名前と数値はこの記事の説明用です。

SELECTで必要な列を指定する

SELECTのあとに取得する列、FROMのあとに表を指定します。titleとpagesだけが必要なら、次のように書けます。SELECT *で全列を選ぶこともできますが、最初は必要な項目を明示すると結果を確認しやすくなります。

SELECT title, pages
FROM books;

この問い合わせでは3行それぞれの本の名前とページ数を取得します。ただし並び順を指定していないため、常にidの順で表示されるとは考えないようにしましょう。欲しい情報と表示順は別に指定します。

参考:PostgreSQL公式「Querying a Table」

WHEREで条件を付け、ORDER BYで並べる

WHEREは条件に合う行を選ぶために使います。ORDER BYは結果を並べる指定です。この例では200ページ以上の本を選び、ページ数が少ない順、同じページ数ならidが小さい順に並べます。

SELECT title, pages
FROM books
WHERE pages >= 200
ORDER BY pages ASC, id ASC;

練習の3行では、「小さな習慣 240」「旅の記録 320」の順になります。ASCは昇順、DESCは降順の指定です。条件の>=を>へ変える場合は、ちょうど200ページの行がどう変わるかを考えると、比較の意味を確認できます。

同じ値の行がある場合に結果の順を安定させたいなら、区別できる列も並び順へ含めます。必要な順序を言葉で決めてから書くと、偶然見えた結果を正しい仕様だと思い込まずに済みます。

結果は件数と境界の値で照合する

問い合わせが実行できても、必要な行が全部取れたとは限りません。元の一覧と比べ、条件に合う件数と値を確認しましょう。200ページ未満、ちょうど200ページ、200ページより多い行を練習に加えると、境界の確認ができます。

  1. 取得したい列を文章で決める
  2. 条件に合う行を手元で数える
  3. 問い合わせを実行して件数を照合する
  4. 並び順と境界の値を確認する

SQLの方言やデータ型、文字の比較にはデータベースごとの差があります。使う製品の公式資料を参照し、実際の仕様を確認してください。アプリから入力を受けて問い合わせる場合は、文字をそのままSQLへつなげず、使用するドライバーのパラメーター指定を学ぶ必要があります。

更新や削除は読み取りと影響が違うため、別の課題として練習します。まずSELECTで必要な情報を取れる状態にし、実データを変更する操作は権限や対象を確認してから扱いましょう。

よくある質問

Q. 表計算のフィルターと同じですか?

条件で行を絞るという点では似た考え方を使えます。ただしSQLはデータベースへの問い合わせで、表示や保存の仕組みは表計算とは異なります。最初は条件と結果を対応させる練習から始めましょう。

Q. WHEREを書かなければどうなりますか?

このSELECTの例では、表のすべての行が取得対象になります。意図している範囲かを確認してください。更新や削除など別の文では影響が大きいため、SELECTの感覚だけで変更処理を実行しないようにしましょう。

実践前のチェックリスト

  1. 表名と列の意味を確認した
  2. 必要な列を明示した
  3. 条件を文章で決めた
  4. 並び順を指定した
  5. 件数と境界の値を照合した

まとめ

SQLの入門では、SELECTで列を選び、WHEREで行を絞り、ORDER BYで順を指定する流れを学びましょう。小さな練習用の表なら、期待する結果を手で確認できます。実行できたかに加え、件数と並び順が目的に合うかを確かめてください。

関連記事