株式会社リゾーム 技術部 システム開発 第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句を付けないと順序保証されない件は注意が必要。
- 書籍には書いていないが、照合順序や型の関係で、思わぬ順番になることがあるので注意が必要。
OFFSET/FETCH - 行数を限定して取得する
OFFSET/FETCH句について、使ったことがない、あるいは知らなかったという方が多かったものの、各DBMS独自のキーワードを使って同様の処理を行うことは少なくなさそうです。
- データ抽出の際は全件取得で問題ないことが多く、あまり使ったことがない。
- LIMITを使ったことがある。
- PostgreSQLやMySQL等で利用できる。
- 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部に入ります。式や関数を用いて計算を行う方法を学びます。