2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQLパズルを学習する上で工夫したこと

Last updated at Posted at 2024-11-24

SQLを勉強しようと思った動機

きっかけとしては、実務でSQLを扱う機会があり理解不足を痛感したためです。
同時にSQLの有用性も認識し、習得するモチベーションも湧きました。
自分がSQLを習得したいと思った理由は以下の2点です。

  • RDBMSを使うシステムなら必ずSQLは出てくるため。バックエンドの言語が何であれSQLは共通。
  • 10年後も使えるスキルだと思うため。

SQLパズルで勉強しようと思った理由

ミックさん著の本『達人に学ぶSQL徹底指南書』で参考書籍に挙がっていたためです。

自分のイメージとしては以下のような関係です。

  • 『達人に学ぶSQL徹底指南書』 ← 教科書
  • 『SQLパズル』 ← 練習問題集

学習の流れ

最初にSQLパズルを目にしたとき、難しいと感じました。そこで、なるべくスモールステップで学習できるよう心がけました。

1. SQLを動かせる環境を用意する

自分が作った環境は以下の通りです。

名前 Version 説明
Ubuntu 22.04 OS
PostgreSQL 14 RDBMS
pgAdmin4 8.4 ブラウザで動くPostgreSQLクライアントソフト
Docker コンテナ型仮想環境
GitHub CodeSpaces クラウドIDE

GitHubのアカウントがあれば、どのPCでも動かせるようにGitHub CodeSpacesで構築しました。

2. 答えのSQLを写経する

  1. で作った環境にSQLファイルを作り、脳死で写経しました。目的はSQLに慣れることです。

この時点でやったことは以下の通りです。

  • SQLの写経とそのSQLファイルを保存する
    (DDLはミックさんのサポートページから拝借したことが多かったです)
  • エラーにならず結果が取得されることを確認する

やらなかったことは以下の通りです。

  • どんなデータを取得したいのか理解すること
  • SQLの意味を理解すること
    (自己結合やEXISTS述語の意味もこの時点では理解していませんでした)
  • 難しい問題はスルー
    例: パズル3「忙しい麻酔医」、パズル12「訴訟の進行状態」
    (パズル3「忙しい麻酔医」は挫折しそうになりました。「これ70番目くらいに出る問題じゃないのか…」と思ったくらいです)

3. 入力と結果のレコードをまとめて具体的な処理を調べる

処理を理解しやすくするため、入力と結果の具体的なレコードの画像をまとめました。自分の場合は紙媒体のほうが理解しやすいので印刷しました。
下の画像はFigmaで入力と結果の具体的なレコードの画像を貼り付けた図
image.png

下の画像は印刷した紙
image.png

作業内容

  • 具体的なレコードを見て、取得したいデータを自分の言葉で文字化
  • 『達人に学ぶSQL徹底指南書』で紹介されている問題から解く
    例: 自己結合の「パズル4 入館証」、HAVING句の「パズル21 飛行機と飛行士」「パズル20 テスト結果」など
  • 類題があれば、ページ数をメモ
  • 答えのSQLを分解し、処理を追って確認
    例: HAVING句をコメントアウトして、GROUP BYのみの結果を確認する

やらなかったこと

  • 実行計画について考えること
    SQLの速度について考える余裕はありませんでした。いつか確認します!
  • 別解を考えること

4. 3の内容を清書してQiitaに投稿する

3で書いた内容を清書してQiitaに投稿しました。
投稿の目的は理解の定着度を上げるためです。

感想

割と満足しています。
SQLに対する苦手意識はなくなりました。
自己結合、HAVING句、CASE式についてはだいぶ慣れたと思います。一方、外部結合やウィンドウ関数についてはまだ慣れていません。
今年中は勉強を続け、外部結合も使いこなせるようにしたいと思います。

参考

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?