SQL50本ノックをSQLite3 Fiddleで試す
Software Design「データベース速攻入門」に「SQL50本ノック」が掲載されました - LIVESENSE ENGINEER BLOG
最近では、postgres-wasmなど、WebブラウザでDBを動かせるようになってきており、もう少しすれば、WebAssemblyを使って、ブラウザですぐにノックを始められるようになるかもしれません。もしも、また何年か後に記事を更新する機会があれば、試してみたいですね。
Web上からすぐに試せるpostgres-wasmはPagilaのデータを持っていくことが現時点で出来なさそうだったものの、SQLite3 WebAssemblyはSQLiteのデータを持っていけました。SQL50本ノックを気軽に試せそうです。
手順1 sakila-sqlite3をダウンロード
まずgithubからsakila-sqlite3をダウンロードします。
github.com
直リンクはこちらです。 sakila_master.db
がダウンロードできればok。
手順2 SQLite3 Fiddleでsakila-sqlite3をロード
SQLite3 Fiddleにアクセスします。画面下の Load DB...
で先ほどダウンロードした sakila_master.db
を選択して読み込みます。
手順3 細かい設定変更を行う(オプション)
画面下のOptionは以下がオススメです。
Auto-scroll output
は offAuto-clear output
は on
手順4 はじめよう
あとは書籍を見ながらSQL50本ノックにチャレンジ! gihyo.jp
SQLiteでの注意事項
- SQLiteのデフォルト設定ではSELECTした結果にカラム名が表示されません。
.headers on
を設定すればカラム名を表示することができます。 - SQLiteではデフォルトだと列揃えがされません。列を揃えたい方は
.mode column
を設定しましょう。 - SQLite3 Fiddleではレコード数が多いと表示にかなり時間がかかります。ノック01でいきなり待たされます。
Auto-scroll output
をoffにするとやや早いです - 書籍ではPostgreSQLのため最後に出力された行数が表示されてますが、SQLiteの場合は行数が表示されません。必要に応じて
SELECT COUNT(*) FROM ...
で行数を確認してください - 元データの差異が理由と思いますが、paymentテーブルの
payment_id
の値が異なるようですので適宜読み替えてください - 書籍ではNULLのデータが空欄になっていますが、SQLite Fiddleでは
NULL
と表示されます - rentalテーブルの
return_date
などTIMESTAMPの表示形式が書籍と異なるので適宜読み替えてください - SQLiteとPostgreSQLでROUND関数の仕様が異なるため適宜書き換えが必要です。CAST関数も必要になるでしょう
- CONCATの代わりに
||
演算子が使えます - information_schemaはないので代わりに
.schema
を駆使しましょう - SQLiteの正規表現はREGEXPが使用できます
- SQLiteで浮動小数点の計算は誤差が発生する可能性があります(ノック28)
- TIMESTAMPから日付を取り出すのはCASTではなくDATE関数が使えます
- 月別はEXTRACTではなくstrftime関数が使えます
- payment_p2022_XXテーブルは存在しないので適宜作成するか読み替えましょう