「スッキリわかるSQL入門」読書会レポート vol. 3

株式会社リゾーム 技術部 システム開発 第3グループの岡部です。今回は「スッキリわかるSQL入門」読書会の第3回のレポートです。

過去のレポートはこちらからご覧いただけます。

書籍について

使用した書籍は「スッキリわかるSQL入門」です。

スッキリわかるSQL入門 第3版 - IT入門書籍 スッキリシリーズ (sukkiri.jp)

今回の学習範囲

今回読んだのは第4章「検索結果の加工」です。

参加者の意見・感想

今回は6名が参加し、お互いに意見や感想を共有しました。

検索結果の加工

検索結果の加工全般について、以下のような意見がありました。当たり前かもしれませんが、担当している製品や業務内容によって、使用するキーワードや頻度が異なってくるようです。

  • WHERE句の条件指定で済む場面が多いので、あまり使う機会が無い。重複の削除と並び替えをたまに使う程度。
  • テストでは、アプリ画面と同じ結果になるよう検索結果を加工することがある。
  • 使ったことがない、あるいは初めて知ったキーワードもあった。

DISTINCT - 重複行を除外する

DISTINCTについては以下のような意見がありました。

  • 時々使う機会がある。
  • 会員の重複を取り除いたうえでデータをチェックしたり、会員数を集計することがある。
  • DISTINCTよりGROUP BYをよく使う。

ORDER BY - 結果を並び替える

ORDER BYについては以下のような意見がありました。今回学んだキーワードの中では最も使用頻度が高そうです。しかし、列番号による指定や順序保証に関して、新しい発見もありました。

  • プロダクトでもテストでも、大変お世話になっている。
  • 列番号で並び替えの基準を指定できるのは知らなかった。
    • しかし書籍にも書いてあるように、列の順番に依存してしまうので、できるだけ使わない方がよさそう。
    • 主キーが連番かつ1列目にあるテーブルのデータを目視で確認するとき、SELECT * FROM table ORDER BY 1 DESC のように書くことはある。プロダクトでは使わない。
    • UNIONなどの集合演算子を使う場合、単純に列名指定できない制約があるため、その際に利用することはある。
  • ORDER BY句を付けないと順序保証されない件は注意が必要。
    • 大抵は主キーでソートされてしまうので、SQLの実行結果だけ見て安心してしまいがち。しかし実質的にはランダムであり、DBMSの実装に依存しているので、順番が重要な場面では必ずORDER BYを付けよう。
  • 書籍には書いていないが、照合順序や型の関係で、思わぬ順番になることがあるので注意が必要。

OFFSET/FETCH - 行数を限定して取得する

OFFSET/FETCH句について、使ったことがない、あるいは知らなかったという方が多かったものの、各DBMS独自のキーワードを使って同様の処理を行うことは少なくなさそうです。

  • データ抽出の際は全件取得で問題ないことが多く、あまり使ったことがない。
  • LIMITを使ったことがある。
  • TOPはよく使う。
    • SQL Serverで利用できる。
    • 逆に、SQL Server以外で使えないのを知らなかった。これが無いと不便に感じてしまう…。
    • SELECT TOP (n) PERCENT * FROM table のように書くことで、上位n%を取得することもできる。

集合演算子

UNION(和集合)やEXCEPT(差集合)、INTERSECT(積集合)といった集合演算子について以下のような意見がありました。これらの中では、主にUNIONを使うことが多そうです。

  • 集合演算子は全く使ったことがなかった。
  • UNIONを使った処理自体は時々見かけるが、自分で書いたことはあまりない。
  • UNIONしか知らなかった。EXCEPTとINTERSECTは使ったことがなかった。
  • EXCEPTは順番に注意。毎回ちょっと混乱する…。

まとめ

今回はSELECTで抽出した検索結果を加工し、目的に合わせて整形する方法を学びました。今まで使う機会があまり無かったキーワードはもちろん、ORDER BYのようによく使うキーワードに関しても、改めて体系的な知識を得ることができたと思います。

次回は第5章「式と関数」で、第II部に入ります。式や関数を用いて計算を行う方法を学びます。