Query 101
このガイドでは、Data と Deck Builder で使用できる GoogleSQL ライクなクエリの書き方を、初心者向けに丁寧に説明します。
目次
クエリの基本概念
クエリってなに?
クエリは「データベースへの質問」です。SQL という言語でデータベースに質問すると、その答えが返ってきます。
MitaMatch では以下のシーンでクエリが使えます:
- Memoria タブ:メモリアカード一覧から条件に合うカードを検索
- Costume タブ:衣装カード一覧から条件に合う衣装を検索
クエリの大きな流れ
SELECT (どの列を表示するか)
FROM (どのテーブルから取得するか)
WHERE (どの条件で絞り込むか)
ORDER BY (どの順で並べるか)
LIMIT (何件まで表示するか);
難しそうに見えますが、1つずつ学べば大丈夫です!
Warningクエリは必ずセミコロン(
;)で終わるクエリの最後には**必ずセミコロン(
;)**を付けてください。これはクエリの終わりを示す合図です。❌ 間違い:
SELECT * FROM memoria✅ 正しい:SELECT * FROM memoria;セミコロンを忘れるとエラーになります!
SELECT - 表示する列を選ぶ
どのカラム(列)を画面に表示するかを決めます。
基本:全てのカラムを表示
SELECT * FROM memoria;
SELECT *→ 「全てのカラムを表示してください」という意味*は「全て」という特別な記号- 全てのメモリアが表示されます
指定:特定のカラムだけ表示
表示するカラム名を カンマ(,)で区切って 並べます:
SELECT `name`, `type`, `released_at` FROM memoria;
結果は以下のような表になります:
| name | type | released_at |
|---|---|---|
| アナ | 通常 | 2024-01-15 |
| ユーリ | 特殊 | 2024-02-20 |
ポイント:
- カラム名は バッククォート(`)で囲む ことが多いです
- 複数指定する時は カンマで区切る
- 順序は自由に変更できます
複雑なカラム名の場合
ドット(.)を使ったカラム名は、バッククォートで囲みます:
SELECT `gvgSkill.name`, `gvgSkill.type` FROM memoria;
読み方:「gvgSkill という情報の中の name と type を表示」
EXCEPT:特定のカラムを除外
全てのカラムから特定のものだけ 除外 したい場合:
SELECT * EXCEPT (`unusedColumn1`, `unusedColumn2`) FROM memoria;
読み方:「全てのカラムを表示。ただし unusedColumn1 と unusedColumn2 は除外」
WHERE - データを絞り込む
全てのデータの中から、特定の条件に合うものだけを表示します。
基本:1つの条件で絞り込む
SELECT * FROM memoria WHERE `type` = '通常';
読み方:「type が『通常』のメモリアだけ表示」
記法:
- カラム名をバッククォートで囲む:
`type` - 等号(
=)で比較 - 文字列の値をシングルクォートで囲む:
'通常'
比較演算子の種類
| 記号 | 意味 | 例 |
|---|---|---|
= | 等しい | `type` = '通常' |
!= | 等しくない | `rarity` != 'レア' |
> | より大きい | `cost` > 10 |
< | より小さい | `cost` < 5 |
>= | 以上 | `cost` >= 3 |
<= | 以下 | `cost` <= 20 |
例:コストが 10 以上のメモリアを表示
SELECT * FROM memoria WHERE `cost` >= 10;
LIKE:文字列を部分一致で検索
完全一致ではなく、文字が「含まれている」かで検索します。
SELECT * FROM memoria WHERE `name` LIKE '%アナ%';
読み方:「name に『アナ』が含まれるメモリア」
%は「任意の文字列」を表すワイルドカード%アナ%→ 「どの文字の後に『アナ』がきて、その後ろに何かあってもいい」
使い方の例:
| パターン | 意味 |
|---|---|
LIKE '%猫%' | 『猫』を含む(前後は何でもいい) |
LIKE '猫%' | 『猫』で始まる |
LIKE '%猫' | 『猫』で終わる |
複数の条件を組み合わせる:AND
両方の条件を満たす場合だけフィルタ:
SELECT * FROM memoria
WHERE `type` = '特殊' AND `cost` > 5;
読み方:「type が『特殊』かつ cost が 5 より大きい」
結果:両方を満たすものだけ表示される
複数の条件を組み合わせる:OR
どちらかの条件を満たす場合:
SELECT * FROM memoria
WHERE `type` = '通常' OR `type` = '特殊';
読み方:「type が『通常』または type が『特殊』」
結果:どちらかに当てはまるもの全て表示される
括弧で条件を整理
複雑な条件は括弧で明確にします:
SELECT * FROM memoria
WHERE (`type` = '通常' OR `type` = '特殊')
AND `cost` <= 10;
読み方:「(type が通常 OR 特殊) かつ cost が 10 以下」
MitaMatch 特有:スキル条件で検索
LIKE を使ったスキル検索はこんな感じ:
SELECT * FROM memoria
WHERE `gvgSkill.name` LIKE '%エンハ%D%';
読み方:「gvgSkill.name に『エンハ』と『D』が両方含まれる」
複数の値をカンマで繋いだ場合も LIKE で検索できます:
SELECT * FROM costume
WHERE `specialSkill` LIKE 'ADX,覚醒';
読み方:「specialSkill に『ADX』と『覚醒』が含まれる」
ORDER BY - 並び順を変える
検索結果の並び方を変えます。
基本:昇順(古い順)
SELECT * FROM memoria
WHERE `type` = '通常'
ORDER BY `released_at`;
読み方:「released_at を昇順で並べる」(小さい順 → 日付なら古い順)
降順(新しい順)
DESC を追加:
SELECT * FROM memoria
WHERE `type` = '通常'
ORDER BY `released_at` DESC;
読み方:「released_at を降順で並べる」(大きい順 → 日付なら新しい順)
複数カラムで並べる
複数のカラムで優先順位をつけて並べられます:
SELECT * FROM memoria
ORDER BY `type`, `cost` DESC;
読み方:「type で並べて、同じ type 内では cost の降順」
LIMIT - 表示件数を制限する
クエリ結果を何件まで表示するかを制限します。
基本:最初の N 件を表示
SELECT * FROM memoria
ORDER BY `released_at` DESC
LIMIT 10;
読み方:「最初の 10 件だけ表示」
よくある使い方:
LIMIT 1→ 最初の 1 件だけ(最新のカード)LIMIT 5→ 最初の 5 件LIMIT 20→ 最初の 20 件
クエリ組み立ての流れ
実際にクエリを書く時の順番を学びましょう。
ステップ 1:何を見たいか決める
「cost が 5 以上 10 以下で、type が特殊のメモリアが見たい」
ステップ 2:テーブルを選ぶ
メモリアだから FROM memoria
ステップ 3:条件を決める
`type` = '特殊'`cost` >= 5`cost` <= 10
ステップ 4:表示するカラムを決める
全て見たいので SELECT *(または特定カラムを指定)
ステップ 5:並び順を決める
リリース日の新しい順が見たいので ORDER BY released_at DESC
完成!
SELECT * FROM memoria
WHERE `type` = '特殊'
AND `cost` >= 5
AND `cost` <= 10
ORDER BY `released_at` DESC;
実践例
Memoria の例
要件:エンハンスを持つ特殊メモリアを、リリース日の新しい順で 20 件表示したい
SELECT `name`, `type`, `gvgSkill.name`, `released_at` FROM memoria
WHERE `type` LIKE '特殊'
AND `gvgSkill.name` LIKE '%エンハ%'
ORDER BY `released_at` DESC
LIMIT 20;
説明:
SELECTで必要なカラムだけ表示WHEREで型と スキル条件で絞り込みORDER BY DESCで新しい順にLIMIT 20で上位 20 件
Costume の例
要件:ADX スキルで覚醒可能な衣装を新しい順で表示
SELECT `name`, `type`, `specialSkill`, `released_at` FROM costume
WHERE `specialSkill` LIKE 'ADX,覚醒'
ORDER BY `released_at` DESC;
よくある質問
Q1: WHERE 条件を書く時、= と LIKE はどう違う?
=:完全に等しい場合だけ`type` = '特殊'→ 『特殊』とぴったり同じ
LIKE:部分一致`type` LIKE '特殊%'→ 『特殊』で始まる何か
使い分け:
- 正確な値が分かっている →
= - 文字の一部を含んでるかで探したい →
LIKE
Q2: シングルクォートで囲んでいいのはどんな時?
値(データそのもの)がテキストの時:
WHERE `type` = '特殊' -- 値がテキストだからシングルクォート
WHERE `cost` > 5 -- 値が数字だから囲まない
Q3: バッククォートは絶対必要?
カラム名に特殊な文字やスペースを含む場合は必須です。
`gvgSkill.name` -- ドットを含むので必須
`specialSkill` -- 通常つけるのが安全
Q4: エラーが出ました、どうしたら?
よくあるエラーと対処法:
| エラー内容 | 原因 | 対処 |
|---|---|---|
| Syntax error | 文法ミス | クエリの文法を確認 |
| Unknown column | カラム名が違う | ヘルプモーダルで正確な列名を確認 |
| Unexpected EOF | クエリが不完全 | セミコロン(;)で終わってるか確認 |
Q5: 複雑な条件を書きたいです
括弧 () を使って優先順位を明確にしましょう:
WHERE (`type` = '通常' OR `type` = '特殊')
AND (`cost` > 5 AND `cost` <= 10)
Q6: ヘルプモーダルで使える列を確認できる?
はい!各タブの右上ヘルプボタンを押すと、使えるカラムの一覧が見れます。
まとめ
| 句 | 役割 | 例 |
|---|---|---|
| SELECT | 表示する列 | SELECT name, type`` |
| FROM | テーブル | FROM memoria |
| WHERE | 絞り込み条件 | WHERE cost > 5 |
| ORDER BY | 並び順 | ORDER BY released_at DESC |
| LIMIT | 表示件数 | LIMIT 20 |
クエリ作成のコツ:
- 小さく始める:簡単な条件から始めて、必要に応じて追加する
- 段階的にテストする:各句を追加する度に実行してみる
- ヘルプを活用:カラム名が分からない時はヘルプモーダルで確認
- 複雑な時は括弧を使う:優先順位を明確にする
楽しいクエリライフを!🎉
次のステップ: より詳しく知りたい場合は、クエリ一覧の使い方 をご覧ください。