1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

前回、電脳少女プログラミングを初めてやってみました。
今回はSQL問題に挑戦してみます。SQLは昔学校で学んだ気がしますが、あまり記憶にない...ので、いい機会と思って勉強したいと思います。

データセンター[Dランク]

まず、問題はこちらです。
image.png

対象のテーブルはこちら。
image.png

SQLにはSELECT文というデータを引き出せるSQL文があるようです。基本形は「SELECT 列名 FROM テーブル名;」で、以下のように対象のテーブルと列を指定したら、無事期待出力と同様の結果を出力できました。

SELECT person.id,person.name
From person;

image.png

無事クリア!!
image.png

二人が通った教室[Cランク]

続いてCランクの問題に挑戦。
問題はこちらです。テーブルは先ほどの問題と同じでした。
image.png

先ほど同様に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	よぉ、レイミ。今日もいい天気だな。このまま俺と二人で戦場を散歩なんてどうだい?

クリア!!
image.png

会員制ジム[Cランク]

続いて同じくCランク問題。少し複雑になりました。
image.png

新たに「カテゴリ」テーブルが追加されたようです。
image.png

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	レベッカ、あなたは思い出せる? 大切な人との思い出を。戦争に行くたびにね、少しずつ大事な記憶が消えていくのが分かるの。

クリア!!

image.png

今回はこの辺で終わろうかなと思います。

おわりに

SQLの基本を学べた気がします。やはりゲーム形式だと精神的ハードルが低く、学習に最適だなと思いました。
より難易度の高い問題も挑みたいところです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?