専用のデータベース付きの SQL 課題を出す
SQL の課題は2つのタブでできています。生徒が書くクエリと、クエリの実行先となるデータベースを作成してデータを入れるスキーマです。どちらも教員が設定します。
スキーマも課題の一部
`CREATE TABLE` と `INSERT` を教員が書くので、生徒全員が同じデータに対してクエリを実行し、正解も教員が把握できます。テーブルはエディターの横に表示されるので、列名を覚えておく必要はありません。
データベースは SQLite で、実行ごとに専用のコンテナーで動きます。そのため、テーブルを削除した生徒が消したのは自分のコピーだけで、ほかの人のものには影響しません。実行のたびにメモリ上に新しいデータベースが作られ、スキーマ、続いてクエリの順に適用されます。
新しい SQL 課題には、すぐに問い合わせできる小さな学校のデータベースが最初から入っています。students、courses、enrollments の3つのテーブルで、どれも5行あり、自分のデータを書く前に select、where、order by、join を試すのに十分です。

実行する
「実行」でクエリが実行され、結果の行が表示されます。「スキーマを実行」はデータベースを作り直すもので、試してみてうまくいかなかったときはこれで元に戻せます。
模範解答で自動採点する
課題に模範解答を付けると、「テストを実行」で自動採点できます。3つ目のタブ「模範解答」に教員のクエリを入れます。生徒のクエリと教員のクエリを同じスキーマに対して実行し、返った行を、順序は無視、重複は無視しない形で比べます。行の順序が違っても合格で、本来2回返るべき行が1回しか返らない場合は不合格です。列は同じ並びで同じものが必要ですが、列名は比べません。
結果は合格か不合格かの1つで、部分点も件数もありません。どちらかのクエリが実行できなければ、「不合格」ではなく「実行不可」と表示します。構文の誤りと答えの誤りは、返すべきフィードバックが違うからです。模範解答は、「模範解答を生徒に読み取り専用で表示する」にチェックを入れない限り生徒には見えませんが、ボタンはどちらの場合も表示されるので、生徒は常に自分の作業を確かめられます。
レッスンの中で使う、スキーマをロックする
レッスンの SQL コードブロックにも同じ二つのタブがあります。スキーマを一度書けば、生徒はレッスンを離れずにそのテーブルに対してクエリを実行できます。レッスンに追加した SQL 課題も同じです。
「生徒に対してスキーマをロックする」にチェックを入れると、生徒はスキーマを見られますが変更できず、全員が先生の用意したデータを問い合わせます。チェックを外しておけば、生徒はそれぞれ自分のコピーを変更できます。
よくある質問
- SQL の方言は何ですか?
- SQLite です。カリキュラムの内容に十分近く、サーバーも不要です。
- 生徒はクエリを書く前にデータを見られますか?
- はい。エディターの横に、テーブルが先頭の数行とともに表示されます。