底辺過ぎてちょっとビビる

26歳からIT業界にいるエンジニアが、まったく成長できてないことを確認するブログ。備忘録的に使いたいとも考えています。

SQLをしばらく使ってないとすぐに忘れる

SQLってしばらく使ってないとすぐに作法を忘れてしまう。SQLに限らずプログラム言語はまんべんなくそうなので、SQLに限った話ではないのだけど。しばらくテストフェーズに関わる期間が長くて、実装から離れていたのもあるし設計もだいぶ関わってない。そうなると、DBを操作する機会(というかデータを意識する機会というか)もけっこうなくなってきていて、そんな状況で急にSQLを使うような場面になると「あれ、どうやってデータ取得すればいいんだっけ」という風になる。だいたい期間としての目安は半年くらい。それくらいですっかり忘れる。

 

あわててSQLのリファレンスを開いて、「あーこうだったこうだった」とSQLを組むのだけど、なんかアホらしいというか、なんでこんなに身になってないのかって考えてみると、場当たり的にリファレンス開いてやってるからだろうなと思う。取り繕って仕事をこなしても結局うわべだけのものなので、本質的に身になってない。

 

SQLとはいってもDBのチューニングとかそういった高度なことではなく、データ操作系のDML程度のことがすぐに記憶から抜け落ちるので、本当に程度が低くて恥ずかしい。エンジニア2年生でも出来るようなことが出来ないことが多くて本当に恥ずかしい。

 

恥ずかしくてたまらないので、本を買って復習することに決めた。いろいろとSQLに関する本はあるけれど、自分にぴったりそうな本があったので、最近はこれで勉強をしている。 

書き込み式SQLのドリル 改訂新版

書き込み式SQLのドリル 改訂新版

 この本の良いところは、本当に簡単なSELECT文からデータ定義までを一通り学び直すことが出来ること。書き込み式、とはなっているが、実際にRDBMSをインストールしてSQLを叩くと構文エラーとかもわかるので、そちらのほうがいい気がする。自分はXAMPPをインストールして、MySQLで実際にSQLを動かしてみている。付録のCDにテーブルとデータが格納されているので、自分でデータを準備しなくていいので楽。

 

なにより実際の現場で使えるSQLをそのまま身につけられるので、ただ本を読むタイプよりもより理解が早いし、自分には合ってると思った。

 

恥ずかしながら、GROUP BY句の使い方として、集計関数(例:AVGなど)を組み合わせて使うのが一般的なことをこの本を読むまで知らなかった。そしてもっと恥ずかしいのはGROUP BY句でグループ化を行う場合に、取得列にはグループ化キーとその集計対象となる列しか指定できないことを知らなかった。どれだけ今まで「なんとなく」でSQLを使ってきたのか...

 

住所別に生徒の年齢平均を知りたい、という場合のGROUP BY句で指定するのは

SELECT
address,
SVG(age)
FROM
student_info
GROUP BY address;

上記のようにaddressだけしか指定できない、ということなのだけど、
そういった事情を知らなかったため関係ない列(たとえば、生徒名など)を指定してしまっていたりした。
実際実行すればエラーを吐くので、その部分を修正するのだけど、本質を理解せず漫然と修正していたわけです。

「なぜエラーになるのか」なんていうことを人に聞くのはいい加減憚れる年齢になってきたので、この本は非常によい。

また、いままであるのは知っていたけど、
使ったことのなかったHAVING句の使い方についても学ぶことが出来た。

たとえば、先程のSQL結果では住所別に年齢平均が出力されるが、
さらに出力条件を絞る(例:20歳未満だけを抽出)なんていうときは
HAVING句を使うとシンプルでわかりやすいことを知った。

SELECT
address,
SVG(age)
FROM
student_info
GROUP BY address
HAVING AVG(age) < 20

HAVING句を使わずとも、WHERE句の中でBETWEENを使って
範囲指定をしてもいいのだろうが、(いままでは多分その方法を使っていた)
当たり前の常識として「HAVING句」というのもあるのだ
ということを知れただけでだいぶよい。

自分のようなエセエンジニアな人は多くはないだろうけど、
ちょっとSQLから離れてしまい改めて覚え直したいと思ってる人や、
エンジニア初心者でSQLの勉強をしたいと考えてる人にも
ぴったりな本だと思います。

とくにDBの制限はないので、Oracleだろうが、MySQLだろうがPostgreSQLだろうがSQLServerだろうがACCESSだろうが関係ない本なので。

スッキリわかる SQL 入門 ドリル215問付き! (スッキリシリーズ)

スッキリわかる SQL 入門 ドリル215問付き! (スッキリシリーズ)

達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)

達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)

[改訂第4版]SQLポケットリファレンス

[改訂第4版]SQLポケットリファレンス