以前からSQLの勉強をしたいなぁと思っていたので、【SQL】『SQL未経験 → 3ヶ月でデータサイエンス100本ノック全問制覇』までのロードマップ (初心者向け)を読んで、SQL練習問題 一覧まとめを解いてみました。
環境
- Visual Studio 2019
- SQL Server(Microsoft SQL Server Data Tools)
SQL練習問題 一覧まとめではMySQL前提のようですので、DDL等をSQL Serverに合わせて変更しています。もしもSQL Serverで練習問題を解いてみたい方はこのDDLを使うのがいいかもしれません。
SQL一式
解答内容とデータ準備に必要なSQLはGitHubに公開しています。
補足
- 見つけた重複データは削除したため、Webページの解答と異なる場合があります
- 解答のSQLはDBMSの違いにより模範解答と差がある場合があります
練習問題を解いてできるようになったこと
- SELECT文はリファレンスを参照しなくても書けるようになりました。一方で、INSERT、UPDATE、DELETEの練習問題はないため、これらは別途訓練が必要です
- 副産物ではありますが、MySQLとSQL ServerのSQLの違いを知ることができました。例えば以下のようなことです
- MySQLでは
TIMESTAMPDIFF()
を使って生年月日から一発で年齢を求められるが、SQL ServerではDATEDIFF()
とDATEADD()
とCASEを組み合わせる必要がある - SQL Serverでは、副問い合わせの結果として複数カラムを受け取ったとき、単純に比較ができない。うまく説明できないのですが、複数の列で in 句を使いたいを読むとわかりやすいと思います
- SQL Serverでは、SELECT句でASを使い定めた名前をGROUP BYに使えない(ORDER BYには使える)。これはSELECTよりもGROUP BYの方が先に処理されるからのようです。ORDER BY句で別名が使えてGROUP BY句では別名が使えない理由が参考になりました
- 先頭x件のデータを取得したいとき、MySQLではLIMITを使うが、SQL ServerではTOPを使う
- MySQLでは
今後
次はデータサイエンス100本ノックに挑戦予定です。