モジュール詳細:基本SQL

大きな数字の表を使いこなして類似点を探すのはなんと楽しいことだろう……。

このモジュールは、SQL文シミュレータである。解除するには、与えられた結果を出力するSQLクエリ(命令)を作成する。入力データはこのマニュアル内にあり、それを使って与えられた結果を表現する。このドキュメントを使用して、入力データから希望通りの結果を表現するSQLクエリを作る。

ゴールボタン

Goalボタンを押すと、モジュールが求めている結果を見ることができる。求められるのは、1~4段、2~3列の数字の表である。以下はその例である。

296
421
714
382
296
421
29
42
71
296

チェックボタン

Checkボタンを押すと、モジュールはSQLクエリを組み立て入力データに対してそれを実行する。結果がゴールの表と比較される。それが一致した場合モジュールは解除され、そうでない場合、ミスが記録される。

モジュールの解除

モジュールを解除するには、入力データからゴール表の数字を見つける。段は常に上から下に並んでいるが、列は並べ替えが可能である。例を以下に示す。

ゴール表

296
421

入力データの例

A B C D E F
9 0 1 6 7 3
6 8 2 4 5 9
2 7 5 3 6 1
1 3 4 9 5 2

入力データ

モジュールの解除に使用される入力データを以下に示す。この表の中のゴール表から値を見つけ、同じ出力を生成するSQLクエリを作成する。

ABCDEFG
9302046
7861298
2054731
4715309
6279865
1937654
8543182

補足

SQL結果は必ずしも読み順ではない。は上から下へだが、はクエリ内のSELECT句で任意に並べ替えられる。

モジュール詳細:SQL

SQLは、データソースを操作して結果を生成する方法を示す問い合わせ言語である。多様なキーワードが含まれているが、このモジュールではそのうちの小さなサブセットのみが使用される。

SQLの処理方法

SQLは以下のように処理される。

  1. 各段はまずWHERE句と比較される(後述)。WHERE句に合致する段がある場合、その段は以降の処理のために保持される。
  2. WHERE句を通過した各段は、次にSELECT句(後述)の処理が行われる。
  3. 最後に、LIMIT句(後述)で結果から最初のX段をスキップして、その次のY段を取ることで、特定の数の段を破棄することができる。

SELECT X, Y, Z

SELECT句はどの列が(どの順に)返されるべきかを選択する。モジュールは、単一の列参照を最大3つまで提供している。各列をクリックすると、AからG、「-」を循環させることができ、「-」はその選択を無効にする。この例を以下に示す。

ABCDEFG
9302046
7861298
2054731
4715309
6279865
1937654
8543182

SQL: SELECT D, A

3番目の参照列は無いことに注意。「-」を使用している。

DA
29
17
42
54
96
71
38

WHERE X 演算子 Y

WHEREは「フィルタ」の役割を果たしている。段は条件と比較される。フィルタ条件に一致した段のみが出力として保持される。このシンプルなSQLシミュレータでは、列と一定の値のみの比較が可能である(例:A < 2、C = 3、F >= 5)。有効な演算子は、以下の単純かつ身近な算術演算子である。

  • =:同値(イコール)
  • <>:同値ではない(ノットイコール)
  • <:未満
  • <=:以下
  • >:より大きい
  • >=:以上

単純なフィルタの基本例を以下に示す。

ABCDEFG
9302046
7861298
2054731
4715309
6279865
1937654
8543182

SQL: WHERE C >= 5

ABCDEFG
7861298
2054731
6279865

 

注意:条件はSELECTされた列だけではなく、どの列にも適用される。

WHERE X AND/OR Y

二つの条件が結果を得るために必要な場合、WHEREと書かれたボタンの下にあるボタンをクリックすると2つ目のフィルタを追加する。二つのフィルタはAND(両方の条件に一致した段を保持)もしくはOR(少なくとも一つの条件に一致した段を保持)を使用して連結される。例を以下に示す。

例のデータ 条件 結果
ABC
930
786
205
471
WHERE A < 7 AND B >= 3
ABC
930
786
205
471
ABC
930
786
205
471
WHERE B <> 8 OR C <= 2
ABC
930
786
205
471

LIMIT X, Y

LIMITの後には、次の二つの値が続く。

  • 一つ目の値:条件適用後に保持する段の個数の最大値。「All」を選択した場合、どの段も除外されない。
  • 二つ目の値:条件適用後にスキップする段の個数の最大値。「None」を選択した場合、どの段も除外されない。

二つ目の値(スキップ)が最初に適用され、結果の最上段からその段数だけスキップされることに注意する。その後、最初の値が適用され、その中から最大個数の段を返す。

例:

例のデータ条件結果
930
786
205
471
LIMIT 2, 0
(制限2、スキップなし)
930
786
930
786
205
471
LIMIT 999, 1
(制限999(なし); 1段スキップ)
786
205
471
930
786
205
471
LIMIT 1, 2
(制限1; 2段スキップ)
205