はじめに
前回、電脳少女プログラミングを初めてやってみました。
今回はSQL問題に挑戦してみます。SQLは昔学校で学んだ気がしますが、あまり記憶にない...ので、いい機会と思って勉強したいと思います。
データセンター[Dランク]
SQLにはSELECT文というデータを引き出せるSQL文があるようです。基本形は「SELECT 列名 FROM テーブル名;」で、以下のように対象のテーブルと列を指定したら、無事期待出力と同様の結果を出力できました。
SELECT person.id,person.name
From person;
二人が通った教室[Cランク]
続いてCランクの問題に挑戦。
問題はこちらです。テーブルは先ほどの問題と同じでした。
先ほど同様にmemoryのidとtalkを出力してみると、
SELECT memory.id,memory.talk
FROM memory
10件のみならずすべての会話が出力されました。
id talk
1 アラン、敵の動きを見て! 右から来る! 私たちはここで防衛ラインを固めるんだ。絶対に突破させるな!
2 レベッカ、しっかりして! 私たちがいる! あなたは一人じゃない、必ず助けるから。今はただここで耐えて
3 アラン、また会えたね。ここでまた共に戦えることがどれだけ嬉しいか分かる?君がいてくれると心強いよ
4 エリック、修理が間に合わないかもしれない。でも君ならできると信じてる。全力を尽くして、私たちの命運は君にかかってる
5 あぁ……レベッカが…どうしてこんなことに……。あの無茶な指示がなければ、彼女はまだここにいたかもしれない……
6 シャドウレインシティの戦いで、アランと再会。変なやつだけど頼りになる仲間だ。彼がいなければ、私たちはここまでこれなかった
7 アラン、もう戻ってこないんだね…。あの笑顔がもう見れないなんて信じられない。悔しいよ……君が死んだのに、もう私は涙の一滴も出ない
8 エリック、なぜだ…なぜこんなことを…。君が私たちを裏切るなんて信じたくない。いつも笑顔で励ましてくれたのに
9 ドクター・カレン、私はもう終わりなのね?死ぬ前に一つだけお願いがあるの
10 よぉ、レイミ。今日もいい天気だな。このまま俺と二人で戦場を散歩なんてどうだい?
11 この戦闘糧食、コンクリートより硬いんだけど、これが敵を倒す新兵器……? そんなわけないよね……うぅ……お腹が痛い
12 僕も君たちみたいにサイボーグになりたかったんだ。子どもの頃の儚い夢だったけど。今はこの立場には満足してる。……本当さ
13 サイボーグ以前に、お前らはまず人間としてやり直すべきだな。戦争は地獄だが、お前らがいると地獄より臭くなる!
14 あんたの存在が、私の人生の最大の失敗だ
15 レイミ、無茶しないでね。あなたが倒れたら、仲間が倒れたら、みんなが悲しむんだから
16 ま、アランのつまらない話も、結局みんなで笑い合えるいいネタになるから、アランはアランで役に立ってるんだと思うよ
17 ああ、もう一度確認してくれ。誰のミスだ? 私ではないな? 糞ったれどもが勝手にやったことだろう。そうだろう? この件は上手く処理するんだ
18 このロボットを君が直したの!? すごいじゃないか! 僕にも……できるかな?
19 いつかこのスラム街から出たら何がしたい? いや、こんなに高い場所にいると、すごく自由な気持ちになってさ
20 でも、君がもっとすごいものを作るって言ってたから。そのために僕ももっと成長するんだ
21 まずは、安心して暮らせる場所がほしい。それから、君が言ってたように、みんなが幸せになれる未来を作りたいな
22 お願い、行きたくないよ! お母さん、助けて…! ……どうして…どうして私が──
23 よく聞け! 今日からお前らは人じゃない。お前らは機械だ! 機械が口答えするか? しないだろ? 分かったら黙って俺の言う事を聞け!
24 私は君の本質を守るために最善を尽くす。……私はひどい大人だ。結局、これっぽちの反抗しかできないんだから
25 レベッカ、あなたは思い出せる? 大切な人との思い出を。戦争に行くたびにね、少しずつ大事な記憶が消えていくのが分かるの。
idの小さい順10件に絞る必要があるため、方法を探したところ、ORDER BYとLIMITでできるようでした。
ORDER BYにてmemory.idを指定し、ASCで昇順を指定。LIMITは上限10件ですね。これを動作確認したところ、
SELECT memory.id,memory.talk
FROM memory
ORDER BY memory.id ASC
LIMIT 10;
無事10件出力されました。
id talk
1 アラン、敵の動きを見て! 右から来る! 私たちはここで防衛ラインを固めるんだ。絶対に突破させるな!
2 レベッカ、しっかりして! 私たちがいる! あなたは一人じゃない、必ず助けるから。今はただここで耐えて
3 アラン、また会えたね。ここでまた共に戦えることがどれだけ嬉しいか分かる?君がいてくれると心強いよ
4 エリック、修理が間に合わないかもしれない。でも君ならできると信じてる。全力を尽くして、私たちの命運は君にかかってる
5 あぁ……レベッカが…どうしてこんなことに……。あの無茶な指示がなければ、彼女はまだここにいたかもしれない……
6 シャドウレインシティの戦いで、アランと再会。変なやつだけど頼りになる仲間だ。彼がいなければ、私たちはここまでこれなかった
7 アラン、もう戻ってこないんだね…。あの笑顔がもう見れないなんて信じられない。悔しいよ……君が死んだのに、もう私は涙の一滴も出ない
8 エリック、なぜだ…なぜこんなことを…。君が私たちを裏切るなんて信じたくない。いつも笑顔で励ましてくれたのに
9 ドクター・カレン、私はもう終わりなのね?死ぬ前に一つだけお願いがあるの
10 よぉ、レイミ。今日もいい天気だな。このまま俺と二人で戦場を散歩なんてどうだい?
会員制ジム[Cランク]
JOINでmemory.category_idとcategory.idを関連付けし、WHERE,ANDで条件を指定したところ、
SELECT memory.id,memory.talk
FROM memory
JOIN category ON memory.category_id = category.id
WHERE memory.importance >= 3
AND category.name = "悲しみ"
正しい回答を得られました。
id talk
5 あぁ……レベッカが…どうしてこんなことに……。あの無茶な指示がなければ、彼女はまだここにいたかもしれない……
7 アラン、もう戻ってこないんだね…。あの笑顔がもう見れないなんて信じられない。悔しいよ……君が死んだのに、もう私は涙の一滴も出ない
14 あんたの存在が、私の人生の最大の失敗だ
22 お願い、行きたくないよ! お母さん、助けて…! ……どうして…どうして私が──
25 レベッカ、あなたは思い出せる? 大切な人との思い出を。戦争に行くたびにね、少しずつ大事な記憶が消えていくのが分かるの。
クリア!!
今回はこの辺で終わろうかなと思います。
おわりに
SQLの基本を学べた気がします。やはりゲーム形式だと精神的ハードルが低く、学習に最適だなと思いました。
より難易度の高い問題も挑みたいところです。