コマンド道場
SQL
練習問題
ホーム
/
SQL
/
練習問題
$ ls drill/
SQL 練習問題
書いた SQL をその場で実行し、
実行結果
で採点します。答えの文字列が一致したかではないので、書き方が違っても正解になります。 登録は不要です。
取り出す
SELECT 句
取り出す列を指定する
必要な列だけを取り出す
難易度 ★☆☆☆☆
shain テーブルから、社員の氏名(name)と給与(salary)だけを取り出してください。列は「name, salary」の順にしてく…
WHERE 句
条件に合う行だけに絞り込む
条件に合う行だけに絞る
難易度 ★☆☆☆☆
給与(salary)が 53 万円以上の社員の氏名と給与を取り出してください。列は「name, salary」の順にしてください。並び順は問…
DISTINCT
重複する行を取り除く
重複を除いて一覧にする
難易度 ★★☆☆☆
社員が 1 人以上所属している部署の busho_id を、重複なく、小さい順に取り出してください。列は「busho_id」の 1 列にして…
ORDER BY 句
結果を並べ替える
複数の条件で並べ替える
難易度 ★★☆☆☆
在籍中の社員(taishoku_on が入っていない社員)を、給与の高い順に並べ、給与が同じ場合は shain_id の小さい順に並べてくだ…
LIMIT / FETCH FIRST
先頭から件数を絞る
上位 3 件だけを取り出す
難易度 ★★☆☆☆
給与が高い上位 3 名の氏名と給与を取り出してください。給与が同じ場合は shain_id の小さい順とします。列は「name, salar…
条件
比較演算子
= <> < > <= >= で値を比べる
給与が 65 万円以下の在籍社員
難易度 ★★☆☆☆
在籍中の社員(taishoku_on に日付が入っていない社員)のうち、給与が 650000 円以下の人を取り出してください。列は「名前, …
AND / OR / NOT
条件を組み合わせる
AND と OR を混ぜるときの括弧
難易度 ★★★☆☆
開発部または営業部に所属する在籍社員のうち、給与が 450000 円以上の人を取り出してください。列は「名前, 給与」の順、給与の高い順に並…
IN 述語
複数の値のいずれかに一致するか
文具と家電の商品を取り出す
難易度 ★★☆☆☆
分類(category)が「文具」または「家電」の商品を取り出してください。列は「商品名, 分類, 定価」の順、定価の高い順に並べ、同額のと…
BETWEEN 述語
範囲に収まるか
期間で受注を絞り込む
難易度 ★★☆☆☆
2025-11-05 から 2025-12-24 までに受注された、取消されていない受注(status が 'done')を取り出してくださ…
LIKE 述語
文字列のパターンに一致するか
「デスク」か「ボード」を含む商品
難易度 ★★☆☆☆
商品名(shohin_name)に「デスク」または「ボード」を含む商品を取り出してください。含まれていればよく、先頭にある必要はありません。…
IS NULL
値が無いことを判定する(= NULL では判定できない)
部署が未定の社員を抽出する
難易度 ★★☆☆☆
部署が決まっていない(busho_id が入っていない)社員の氏名を、shain_id の小さい順に求めてください。列は「name」の 1 …
集約
集約関数
COUNT / SUM / AVG / MIN / MAX
count(*) と count(列) は違う
難易度 ★★☆☆☆
顧客テーブルについて、①顧客の総数と、②都道府県(pref)が登録されている顧客の数を、1 行 2 列で求めてください。列は「①, ②」の順…
GROUP BY 句
指定した単位ごとにまとめて集計する
部署ごとの平均給与を高い順に
難易度 ★★☆☆☆
在籍中の社員について、部署名と平均給与を求めてください。列は「部署名, 平均給与」の順、平均給与の高い順に並べてください。平均給与は小数を四…
HAVING 句
集計した結果に対して条件を付ける
集計した結果に条件をつける
難易度 ★★★☆☆
成立した受注(status が done)の明細から、商品ごとの売上合計(数量 × 受注時点の単価)を求め、売上合計が 4 万円以上の商品だ…
結合
INNER JOIN
両方にある行だけを結び付ける
受注と顧客をつなぐ
難易度 ★★☆☆☆
成立した受注(status が done)について、受注 ID・顧客名・受注日を取り出してください。列は「juchu_id, kokyaku…
LEFT / RIGHT OUTER JOIN
片方にしかない行も残す
受注が 0 件の顧客も一覧に出す
難易度 ★★★☆☆
すべての顧客について、その顧客の受注件数を求めてください。受注が 1 件も無い顧客も、件数 0 として結果に含めてください。取消された受注も…
FULL OUTER JOIN
どちらにしかない行も残す
相手がいない行を洗い出す
難易度 ★★★★☆
部署に所属していない社員と、社員が 1 人も所属していない部署を、1 つの結果として洗い出してください。列は「name, busho_nam…
CROSS JOIN
すべての組み合わせを作る
すべての組み合わせを作る
難易度 ★★★☆☆
文具カテゴリ(category が「文具」)の商品と、すべての顧客の組み合わせをすべて作ってください。売上があるかどうかは問いません。列は「…
ON 句と USING 句
結合条件の書き方
ON と WHERE のどちらに書くか
難易度 ★★★★☆
すべての部署について、2020 年 1 月 1 日以降に入社した社員の人数を求めてください。該当する社員が 1 人もいない部署も、人数 0 …
副問い合わせ
スカラー副問い合わせ
1 行 1 列を返す副問い合わせ
全社平均を下回る社員
難易度 ★★★☆☆
在籍中の社員のうち、給与が「在籍中の社員全体の平均給与」を下回る人を取り出してください。平均を求めるときも退職者は含めません。列は「名前, …
IN / EXISTS
存在するかどうかで絞り込む
2026 年に受注が無い顧客
難易度 ★★★☆☆
2026-01-01 以降に、取消されていない受注(status が 'done')が 1 件も無い顧客を取り出してください。列は「顧客名,…
相関副問い合わせ
外側の行ごとに評価される副問い合わせ
部署の平均を上回る社員
難易度 ★★★★☆
在籍中の社員のうち、給与が「自分が所属する部署の平均給与」を上回る人を取り出してください。平均を求めるときも退職者は含めません。列は「部署名…
FROM 句の副問い合わせ
副問い合わせの結果を表として扱う
受注 1 件あたりの平均金額
難易度 ★★★★☆
取消されていない受注(status が 'done')について、顧客ごとの「受注 1 件あたりの平均金額」を求めてください。受注 1 件の金…
集合演算
UNION / UNION ALL
結果を縦に足す(重複を消すか残すか)
2 つの条件の結果を重複なくまとめる
難易度 ★★★☆☆
次の 2 つの一覧を、重複する社員が 2 度出てこないようにまとめてください。①経営部または管理部に所属する在籍社員 ②給与が 650000…
INTERSECT
両方に共通する行だけを取る
2 年続けて受注がある顧客
難易度 ★★★☆☆
2025 年中にも 2026 年中にも、取消されていない受注(status が 'done')がある顧客を取り出してください。列は「顧客名」…
EXCEPT
片方にしかない行を取る
今年になって売れなくなった商品
難易度 ★★★☆☆
2025 年中には取消されていない受注(status が 'done')で売れたのに、2026 年に入ってからは一度も売れていない商品を取り…
関数・式
文字列関数
連結・部分取り出し・長さの取得など
文字数で絞り込んで分類とつなぐ
難易度 ★★☆☆☆
商品名(shohin_name)が 5 文字以上の商品について、「分類/商品名」の形でつないだ文字列と、商品名の文字数を出してください。列は…
日付関数
現在日時・日付の加減算・切り出し
年月ごとの受注件数と売上
難易度 ★★★★☆
取消されていない受注(status が 'done')を年月ごとに集計してください。列は「年, 月, 受注件数, 売上合計」の順です。受注件…
NULL を扱う関数
COALESCE などで NULL を別の値に置き換える
未登録と 0 件を正しく表示する
難易度 ★★★★☆
すべての顧客について「顧客名, 都道府県, 受注件数」を出してください。都道府県(pref)が未登録の顧客は「未登録」と表示します。受注件数…
CASE 式
条件によって値を切り替える
給与を 3 段階に分類する
難易度 ★★★☆☆
在籍中の社員を給与で 3 段階に分類してください。700000 円以上は「高」、400000 円以上 700000 円未満は「中」、それ未満…
ウィンドウ関数
ROW_NUMBER / RANK / DENSE_RANK
順位を振る
同額は同順位、次は飛ばす順位づけ
難易度 ★★★★☆
在籍中の社員に給与の高い順で順位を付けてください。給与が同額なら同じ順位とし、その次の順位は飛ばします(1, 2, 2, 4 のように付けま…
集約関数のウィンドウ化
累計や移動平均を求める
受注金額の累計を出す
難易度 ★★★★★
取消されていない受注(status が 'done')を受注日の古い順に並べ、受注ごとの金額と、その受注までの累計金額を出してください。金額…
CTE(共通表式)
WITH 句
副問い合わせに名前を付けて読みやすくする
同じ集計を 2 度使う(WITH)
難易度 ★★★★☆
取消されていない受注(status が 'done')について、顧客ごとの売上合計(数量 × 単価 の合計)を求め、そのうち「全顧客の売上合…
再帰 CTE
階層構造をたどる
部署の階層をたどる
難易度 ★★★★★
busho テーブルの親子関係(parent_busho_id)をたどって、すべての部署の階層を求めてください。最上位の部署(親を持たない部…
更新系
INSERT
行を追加する
新入社員を登録する
難易度 ★★☆☆☆
次の社員を shain テーブルに登録してください。社員番号 19、名前「森」、所属は開発部、上司は佐藤(社員番号 2)、給与 430000…
UPDATE
既存の行を書き換える
開発部の社員を 5% 昇給させる
難易度 ★★★☆☆
開発部(busho_name が「開発」)に所属する社員の給与を 5% 引き上げてください。下位部署である基盤部の社員や、他の部署の社員の給…
DELETE
行を削除する
2025 年より前の退職者だけを削除
難易度 ★★★☆☆
退職日(taishoku_on)が 2025-01-01 より前の社員を shain テーブルから削除してください。2025-01-01 以…