Gマイナー志向

とくに意味はありません

SQL50本ノックをSQLite3 Fiddleで試す

Software Design「データベース速攻入門」に「SQL50本ノック」が掲載されました - LIVESENSE ENGINEER BLOG

最近では、postgres-wasmなど、WebブラウザでDBを動かせるようになってきており、もう少しすれば、WebAssemblyを使って、ブラウザですぐにノックを始められるようになるかもしれません。もしも、また何年か後に記事を更新する機会があれば、試してみたいですね。

Web上からすぐに試せるpostgres-wasmPagilaのデータを持っていくことが現時点で出来なさそうだったものの、SQLite3 WebAssemblySQLiteのデータを持っていけました。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 は off
  • Auto-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の表示形式が書籍と異なるので適宜読み替えてください
  • SQLitePostgreSQLでROUND関数の仕様が異なるため適宜書き換えが必要です。CAST関数も必要になるでしょう
  • CONCATの代わりに || 演算子が使えます
  • information_schemaはないので代わりに .schema を駆使しましょう
  • SQLite正規表現REGEXPが使用できます
  • SQLite浮動小数点の計算は誤差が発生する可能性があります(ノック28)
  • TIMESTAMPから日付を取り出すのはCASTではなくDATE関数が使えます
  • 月別はEXTRACTではなくstrftime関数が使えます
  • payment_p2022_XXテーブルは存在しないので適宜作成するか読み替えましょう