SQLが書けない自分に絶望した~SQLを本腰入れて勉強する~

## 概要

100日を迎えた息子が可愛すぎて赤ちゃん言葉が抜けないだいちでしゅ。
気持ち悪いのは置いておいて
最近、あることをきっかけにSQLをしっかりと学ぼうとなりました。
全く学んでこなかった訳ではないですが、追加、更新、削除、ソートなどなど
基本が出来ていたら割と実務でも対応出来ていたのでそのまま過ごしていました。
しかし、あるきっかけで全くSQLが書けないことに気づいてこう思いました。

__「自分、クソだな。」__
自分で言うのもなんですが、割と出来ると思ってはいました。
だからこそ書けないことに気づいた時には割と絶望を感じました。


## 記事を読んでメリットがある人
今回の記事ではそんな自分がどうやってSQLを学んでいるのか
現在進行形の学習方法についてまとめていきます。

- SQLをこれから学ぶ人
- 自分と同じようにしっかりと学び直したい人
- SQL大好きな人

以上の人にメリットがある記事だと思うので
是非とも最後まで読んでみてください。

## 課題
### SQLが書けない自分
から
### SQLが書ける自分
になる
## 課題の原因
生SQLは若干書いてはいました。
だけど、学習の過程でFWを使うようになりこれが便利なのがたまに傷。
Laravelを使っているのですが、ORMが本当に便利すぎてこれがいけなかった。
いざ、生SQLで書いて！となると手が止まる。
UPDATE文ってどう書いたっけ？となり調べるのです。

実際の実務（保守）でSQLのチューニングをする機会があります。
この時にLaravelのソースコードだけをみても解決には結びづらく、
時間だけを消耗してました。
Laravelから吐かれたSQLを読んで、分析して原因を特定して
SQLを改修する。
この時にしっかりとSQLが読めていないと大変な思いをします。

ORMではなくSQLを理解していきましょう。
## 課題を解決するために
現在、勉強しているのですが方法としては以下の2つ

- 技術書
- Udemy

どちらもハンズオンでしっかりと手を動かしていきます。
メモを取ってもいいですが正直見返す習慣がなければ意味がないので
とにかく手を動かしていきます。

## 課題解決の概要
- 技術書
  勤めている会社での購入も可能でしたが以下の本を実費で購入しました。
  [達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ](https://amzn.to/3FwLdGw)
  理由はスピード感
  会社だとどうしても時間がかかってなかなか当日に手に入れることができないので
  鉄は熱いうちに打ての考えで、勉強しようと思ったその日の仕事帰りに買いました。

- Udemy
  Udemyはなんと！会社がビジネスプランを契約してくれた兼ね合いで
  無料で見放題なのです。
  せっかくなら活用しようとSQLで検索をすると出てきてくれました。

[【入門から応用まで】これだけでMySQLをマスター！最も包括的にSQLデータ解析を学べる講座（SQLテキスト付）](https://e2.udemymail.com/ls/click?upn=yJxZIwdmUisgnzIKMbJxorwz9QaPZEQZzMUA9eaCSTKhSWNqQ4UJhadeDUACO7bkc52QTBABlB-2BGcW5-2FEZMNqwSRjjlsF57YLnD2xvqOi5UJ8qcrf1tQe7vquCMuZiV1rIsRGJy7blAAE7-2Bh7qVpmGOUsaUbpHbajohYYGNAw2lZmILLF7BIo85TKZZhTHPXjbBE8POf1ndtr8wHM4ZXxLmUsXfNN-2BvatObtZfTquOoZ484ALQqyPisN6BiycUi0aG9r14H-2FBZvZsIh7aNoEvMyShHlMUjJfyomXW5ztuis-3DwJmA_yeivWq9ZJN5mEqgCV4vf2O6V4sT9XkrUFw0jXqT5RXOIiK-2FT7dzhxp0toUj8VQyAvKR2mUXqlqd-2F9YtvjWy8-2BJbmmiIrL-2Fd6wtDj7qngeJnmEllmWMOIl95ez-2BxXk8a7-2B9Z8Xo7zsky-2Fju1EuDKZhEh2Xpz-2FUamZgXZDCkGbs8E5rUQwLPWMhrun-2BbUMFYy6NpduBJFDmGJDzgHNOAdugMu8Y-2FfGf-2BJR8OB-2FnmKrUsvdAkB60TpkUMZlRV-2FoAFKFMvEwZvjOA1V5RTm4B9V-2FD0DsINp-2F-2F06Cxf7s8rdmulougOUazYR3TgIzLW2A8MqX7nBsxZ5tsNRa8lTQSoLWxPqZ34MruUQ5YYYdCxLN3yWDN9HrVWfIUyP-2FlEVlkgeUUg-2FY2b4uaTNY8lFXbzNIzhXnF-2FABchYoqomFBmqzMmA-3D)
## それぞれの効果について
- 技術書
  実務で書いたことのなかったcase文から始まり、新たな知見が多いと感じる一冊です。
  まだ読破してませんが、表紙に書いてあるとおり「初心者で終わりたくない」人にはおすすめ。しっかりとハンズオンで学べてます。早速、case文に関しては実務でも読み解くのにそこまで時間がかかるに読めました（...と思うw）
- Udemy
  動画なので画面を通して実際の結果が見れるのが大きいメリット。
  自分でも動かして出した結果と比較して、違いがあれば間違いに気付くことができる。
  あとは手を動かす頻度が技術書よりも多く感じたので「体で覚える」ことが出来たと感じてます。実務でもSQL文を考えるときの時間がやや短縮されてるように思います。

## どのように課題が解決されるか
まだ勉強途中ですが、技術書・Udemy共に三分の一ほど進めた段階でも実務での応用力がついている気がします。
案件やポジションにもよりますが、僕の場合は保守でSQLと睨めっこする機会が多いため勉強した内容を活かしたらいいのかも。と仮定を立てて進めることが出来ています。
少なくても過去の自分に対して感じていた無力感は軽減されています。
とは言ってもまだまだ道の途中。一番大事な勉強の継続をしつつより一層業務に励んでいきます。

## 実例
勉強をしていて実務に活かせた実例をひとつ。
Udemyで学習をしている中でインデックスとユニークキーについて勉強しました。
その後、実務でDBのデータ移行をしているときに移行先のデータにインデックス、ユニークキーが外れた状態でデータ移行されているのを発見。
そんな状態が故に移行先のDBに接続したアプリケーションのパフォーマンスは亀よりも遅い。
原因がわかったらいざ検証。そこで勉強したユニークキーの設定、インデックスを貼ってからパフォーマンスを確認すると改善されたのを確認。
ここまででもし勉強をしていなかったら、
インデックスってどう貼るんだ？
そもそもなんだろうか？
みたいな所からのスタートでそれらを調べるのにも時間をかけてしまったと思います。
勉強したことで若干ではありますが業務効率が良くなりました。
また、勉強したことが身を結んだのをすぐに体感できたので達成感も得ました。

## 注意
下記の技術書、Udemyの講座ですが、まだ学習途中のため全てのメリットを伝えきれておりません。
そのため僕の記事を読んで過小評価はしないように、ご自身で是非とも利用してみてほしいと思います。

[達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ](https://amzn.to/3FwLdGw)

[【入門から応用まで】これだけでMySQLをマスター！最も包括的にSQLデータ解析を学べる講座（SQLテキスト付）](https://e2.udemymail.com/ls/click?upn=yJxZIwdmUisgnzIKMbJxorwz9QaPZEQZzMUA9eaCSTKhSWNqQ4UJhadeDUACO7bkc52QTBABlB-2BGcW5-2FEZMNqwSRjjlsF57YLnD2xvqOi5UJ8qcrf1tQe7vquCMuZiV1rIsRGJy7blAAE7-2Bh7qVpmGOUsaUbpHbajohYYGNAw2lZmILLF7BIo85TKZZhTHPXjbBE8POf1ndtr8wHM4ZXxLmUsXfNN-2BvatObtZfTquOoZ484ALQqyPisN6BiycUi0aG9r14H-2FBZvZsIh7aNoEvMyShHlMUjJfyomXW5ztuis-3DwJmA_yeivWq9ZJN5mEqgCV4vf2O6V4sT9XkrUFw0jXqT5RXOIiK-2FT7dzhxp0toUj8VQyAvKR2mUXqlqd-2F9YtvjWy8-2BJbmmiIrL-2Fd6wtDj7qngeJnmEllmWMOIl95ez-2BxXk8a7-2B9Z8Xo7zsky-2Fju1EuDKZhEh2Xpz-2FUamZgXZDCkGbs8E5rUQwLPWMhrun-2BbUMFYy6NpduBJFDmGJDzgHNOAdugMu8Y-2FfGf-2BJR8OB-2FnmKrUsvdAkB60TpkUMZlRV-2FoAFKFMvEwZvjOA1V5RTm4B9V-2FD0DsINp-2F-2F06Cxf7s8rdmulougOUazYR3TgIzLW2A8MqX7nBsxZ5tsNRa8lTQSoLWxPqZ34MruUQ5YYYdCxLN3yWDN9HrVWfIUyP-2FlEVlkgeUUg-2FY2b4uaTNY8lFXbzNIzhXnF-2FABchYoqomFBmqzMmA-3D)