Hirologue

年齢を理由にエンジニアになることを諦めないミドルの成長記録

EP 17: SQLはじめました

はじめに

Pythonの学習を一通り終えたので、次はSQLについて学習します。
Webアプリケーションとは切っても切れない関係のSQLですので、ここは書籍を使ってしっかり学びたいと思います。

SQLに関する書籍は巷に多く存在していますが、選択肢が多すぎるというのも悩みの種です。 売上ランキングや、通販サイト等のレビューを参考にしたりと、選び方は人それぞれです。
初心者向けと謳っていても内容が中級者向けだったりすることもありますので、書籍選びは慎重に行わなければいけません。

私自身、SQLについては独学時にUdemyで少しだけ学んだことがあります。
とは言っても、動画を視聴して、少しだけ手を動かして何となくの雰囲気だけ掴んだ程度です。
今となっては当時の学習内容の記憶は殆どリセットされているので、結局のところ全くの初心者と言ってもいいレベルです。

ただ、そのときに思ったことがあります。

それは、
「データの抽出の仕方は教わるけど、このデータ(テーブル)はどうやって作るんだ?」
という疑問です。
学習内容が記憶から消し去られていても、この疑問は今なお鮮明に記憶しています。

他にも、データの追加や削除はどうするんだろう?といった疑問もありました。

そのような背景もあり、書籍選びでは、いわゆるCRUD(Create/Read/Update/Delete)を網羅している初心者向けのものを使って学習したいと思っていました。

ということで、初心者向けで定評のある
👇こちらの書籍を使ってSQLを学習しました。
book.impress.co.jp

本記事では「スッキリわかるSQL入門 第4版」の内容について、率直な感想を初心者目線で述べたいと思います。


良かったところ

身近なデータである”家計簿”を題材にしていること

家計簿を題材としたストーリー仕立ての内容となっているため、学習する内容のイメージが掴みやすいです。
具体的なイメージを持ちやすかったこともあり、学習途中で理解が追いつかず躓くといったことが非常に少なく感じました。

各章に練習問題があること

章末に学習内容の理解を深めるための練習問題が用意されている点も非常に良かったです。
私は内容をサラッと読んで、概要をある程度把握してから練習問題に取り組むようにしていました。
練習問題は、一度自分で考えはしますが、わからなければ答えを見て、実際に手を動かし、理解することを優先しました。

学習した内容の練習問題なのに、答えを見るの?と思った方もいるではないでしょうか。

確かに独学でプログラミングを学び始めた頃は、何とか覚えなきゃいけないと思い、必死にノートに書いて覚えようとしていた時期もありました。
現代の日本が抱える詰め込み教育の弊害とも言える考え方ですね。
しかし、よく考えてみてください。
プロの方々もわからなければ、ググって解決している訳ですし、何かの試験を受ける訳ではないのですから、カンニングOKなのです。

ガッチガチに覚えるのではなく、内容を理解する。これにつきます。

私が尊敬するエンジニアの一人、はやたすさんもこう仰っています。


練習問題とは別に演習(ドリル)が用意されていること

巻末には章末の練習問題とは別にドリルが256問も用意されています。
前述の練習問題で、学習内容を理解するようにしましたが、学習の仕上げとしてドリルに取り組むことで知識の定着化が図れるようになっている点も非常に良かったです。
誰しも幼き頃にひたすら漢字ドリルや計算ドリルをやったことはあると思いますが、この演習問題は正しくそれです。
最初のうちは答えを見ながら解いていきますが、数をこなすことによって解答を見ずに解くことができました。


このように、身近なデータで学習内容のイメージを湧きやすくし、練習問題で理解を深め、多くの演習問題で知識を定着させるという流れになっている点が、この本の特筆すべき長所であると私は考えます。


学んだこと

この書籍で、SELECT, UPDATE, DELETE, INSERTの4大命令を学び、独学時に抱いていた疑問の一つである「データの追加と削除はどうやってやるのか?」を真っ先に解決できました。
命令によって書き方が異なるため、はじめのうちは戸惑いましたが、前述の練習問題やドリルを通じてしっかりと理解し、基本的な内容を身につけることができました。

また、現職では様々なデータを扱っており、会社の基幹システムにデータを入力しているときにいつも思っていた疑問があります。

それは、「データ入力している人が他にもいるのにデータに矛盾が生じないのはなぜ?」です。 この疑問については、トランザクション制御について学んだことで解決できました。

トランザクション制御は、複数のデータ操作を一つのまとまりとして扱い、すべての操作が成功したときのみデータベースに反映される仕組みです。
Webアプリケーション開発においては、複数のユーザーが同時にデータ操作することもあるため、この仕組みを理解するのは非常に重要であると感じました。


難しかったこと

冒頭で述べたように、テーブルの作り方を知りたいと以前から思っていました。
この書籍にはテーブルの作り方(CREATE)についての説明も含まれているので、基本的な作り方は理解できました。

しかし、そのテーブルの設計方法については少し難しく感じました。
要件から概念設計をし、それを基に論理設計、物理設計と進めることは理解できるのですが、それらの理解度はかなり低いと自覚しています。

書籍の中ではテーブル設計について、内容が薄く、どこかサラッと済ませているような印象さえも受けました。
ですので、ここは大枠だけ学んで、本質的な内容についてはテーブル設計を扱う別の書籍でしっかり学習する必要があると思い、深追いするのを止めました。

テーブル設計に関する理解度が低い理由については、次の「悪かったこと」で述べたいと思います。


悪かったこと

演習(ドリル)の解説がない

前述の通り、この書籍の良いところは、章末の練習問題と大量のドリルが用意されていることです。
解答例も用意されていますが、ドリルについてはPDFをダウンロードしないと見れないようになっています。

しかも用意された解答例に解説の類がないことが非常にもったいなく感じました。

私の学習スタイルは、練習問題やドリルをこなして理解を深め定着させるというものです。
解説がなくても大丈夫な内容であれば不満ではないのですが、テーブル設計のように考え方が重要な内容について解説が用意されていないのは致命的かなと、個人的には思います。
例えば、ER図を書いてくださいという問題でも解答例のER図だけを載せて、解説がないのでどのような手順や考え方でER図を作成するべきなのかわからないわけです。

このようなことを書くと他責思考のようで、嫌なのですが、解説がないことがこの書籍を読み終えた時点でテーブル設計の理解度が低い原因の一つなのかなと思います。
ただ、非常に重要なテーブル設計についてこのまま放って置くわけにもいきません。
テーブル設計については他の書籍等で学習してから、再度この書籍に戻って理解度を高めていきたいと思います。

dokoQLの使い勝手が少し残念

この書籍では、環境構築の手間をなくし、ブラウザ経由でSQLを実行できるdokoQLという仕組みが用意されています。

多くのプログラミング初心者が環境構築が上手くいかず挫折することを考えれば、環境構築が不要である点は大いに評価すべきことなのですが、使ってみて残念な点がありました。
それは、入力画面で全角スペースと半角スペースの見分けが付きにくい点です。

SQL文を入力して実行すると、構文的にも間違っていないはずなのにエラーが発生することがしばしばありました。
その場合のエラーの原因の大半は、半角スペースではなく、全角スペースを入力していたことでした。 この手のエラーが発生すると、何度も入力内容を見返し、一文字ずつ確認してやっと気づくといった感じで、エラーの解消に多くの時間を費やしました。
せめて、全角スペースをハイライト表示などで強調してくれたらいいのになと、何回思ったかわかりません。

環境構築不要ですぐに使えるというのが長所であるだけに、この点が少し残念に感じました。



SQL初心者目線で率直な感想を述べてきましたが、いかがだったでしょうか。

良い点もあれば悪い点もありますが、総合的に判断するなら、SQLのはじめの一冊としてふさわしい書籍の一つであると思います。

本記事がSQLの初心者向け書籍を探している方の一助となれば幸いです。