SQL練習問題 – 一覧まとめ


SQL練習問題の一覧です。
難易度にばらつきがありますので、基礎的なポイントを確認したい場合には、★のついていない基礎力チェックシリーズ(問25以降)から始めてみてください。自信のある方は力試しシリーズの問1から、実力を試してみたい方は★★★の問題へチャレンジしてみると力試しになるかと思います。


力試しシリーズ

この問題が解ければあなたのSQL力は業務レベル!?

問題
番号
問題 難易度 備考
1 各グループの中でFIFAランクが最も高い国と低い国のランキング番号を表示してください。
2 各国の平均身長を高い方から順に表示してください。ただし、FROM句はcountriesテーブルとしてください。
3 各国の平均身長を高い方から順に表示してください。ただし、FROM句はcountriesテーブルとしてください。 ★★
4 各国の平均身長を高い方から順に表示してください。ただし、FROM句はplayersテーブルとして、テーブル結合を使わず副問合せを用いてください。 ★★
5 キックオフ日時と対戦国の国名をキックオフ日時の早いものから順に表示してください。
6 すべての選手を対象として選手ごとの得点ランキングを表示してください。(SELECT句で副問合せを使うこと)
7 すべての選手を対象として選手ごとの得点ランキングを表示してください。(テーブル結合を使うこと) ★★
8 各ポジションごとの総得点を表示してください。
9 ワールドカップ開催当時(2014-06-13)の年齢をプレイヤー毎に表示する。 ★★
10 オウンゴールの回数を表示する
11 各グループごとの総得点数を表示して下さい。 ★★
12 日本VSコロンビア戦(pairings.id = 103)でのコロンビアの得点のゴール時間を表示してください
13 日本VSコロンビア戦の勝敗を表示して下さい。
14 グループCの各対戦毎にゴール数を表示してください。 ★★
15 グループCの各対戦毎にゴール数を表示してください。 ★★
16 グループCの各対戦毎にゴール数を表示してください。 ★★★
17 問題16の結果に得失点差を追加してください。 ★★★
18 ブラジル(my_country_id = 1)対クロアチア(enemy_country_id = 4)戦のキックオフ時間(現地時間)を表示してください。
19 年齢ごとの選手数を表示してください。
20 年齢ごとの選手数を表示してください。ただし、10歳毎に合算して表示してください。 ★★
21 年齢ごとの選手数を表示してください。ただし、5歳毎に合算して表示してください。 ★★
22 以下の条件でSQLを作成し、抽出された結果をもとにどんなことが分析できるか考えてみてください。 ★★
23 身長の高い選手ベスト5を抽出し、以下の項目を表示してください。
24 身長の高い選手6位~20位を抽出し、以下の項目を表示してください。

基礎力チェックシリーズ

SQLを勉強しはじめたばかりの方向け!たくさん解いてSQL基礎力を高めましょう!

問題
番号
問題 難易度 備考
25 全選手の以下のデータを抽出してください。 射影
26 グループCに所属する国をすべて抽出してください。 選択(=)
27 グループC以外に所属する国をすべて抽出してください。 選択(!=)
28 2016年1月13日現在で40歳以上の選手を抽出してください。(誕生日の人を含めてください。) 選択(>=、<=)
29 身長が170cm未満の選手を抽出してください。 選択(>、<)
30 FIFAランクが日本(46位)の前後10位に該当する国(36位~56位)を抽出してください。ただし、BETWEEN句を用いてください。 選択(BETWEEN)
31 選手のポジションがGK、DF、MFに該当する選手をすべて抽出してください。ただし、IN句を用いてください。 選択(IN)
32 オウンゴールとなったゴールを抽出してください。goalsテーブルのplayer_idカラムにNULLが格納されているデータがオウンゴールを表しています。 選択(IS NULL)
33 オウンゴール以外のゴールを抽出してください。goalsテーブルのplayer_idカラムにNULLが格納されているデータがオウンゴールを表しています。 選択(IS NOT NULL)
34 名前の末尾が「ニョ」で終わるプレイヤーを抽出してください。 選択(LIKE前方or後方)
35 名前の中に「ニョ」が含まれるプレイヤーを抽出してください。 選択(LIKE前方後方一致)
36 グループA以外に所属する国をすべて抽出してください。ただし、「!=」や「<>」を使わずに、「NOT」を使用してください。 選択(NOT)
37 全選手の中でBMI値が20台の選手を抽出してください。BMIは以下の式で求めることができます。 選択(AND)
38 全選手の中から小柄な選手(身長が165cm未満か、60kg未満)を抽出してください。 選択(OR)
39 FWかMFの中で170未満の選手を抽出してください。ただし、ORとANDを使用してください。 選択(AND、ORの組み合わせ)
40 ポジションの一覧を表示してください。グループ化は使用しないでください。 DISTINCT
41 全選手の身長と体重を足した値を表示してください。合わせて選手の名前、選手の所属クラブも表示してください。 算術演算子(SELECT句)
42 選手名とポジションを以下の形式で出力してください。シングルクォートに注意してください。 文字列結合、エスケープシーケンス
43 全選手の身長と体重を足した値をカラム名「体力指数」として表示してください。合わせて選手の名前、選手の所属クラブも表示してください。 列見出し
44 FIFAランクの高い国から順にすべての国名を表示してください。 ソート(単一カラム)
45 全ての選手を年齢の低い順に表示してください。なお、年齢を計算する必要はありません。 ソート(降順)
46 全ての選手を身長の大きい順に表示してください。同じ身長の選手は体重の重い順に表示してください。 ソート(複数カラム)
47 全ての選手のポジションの1文字目(GKであればG、FWであればF)を出力してください。 単一行関数(文字列関数)
48 出場国の国名が長いものから順に出力してください。 単一行関数(文字列関数)
49 全選手の誕生日を「2017年04月30日」のフォーマットで出力してください。 単一行関数(DATE_FORMAT)
50 全てのゴール情報を出力してください。ただし、オウンゴール(player_idがNULLのデータ)はIFNULL関数を使用してplayer_idを「9999」と表示してください。 単一行関数(IFNULL)
51 全てのゴール情報を出力してください。ただし、オウンゴール(player_idがNULLのデータ)はCASE関数を使用してplayer_idを「9999」と表示してください。 単一行関数(CASE)

動作環境について

筆者の環境は以下となっていますが、別のデータベースやツールでもほとんど同じように動作すると思います。

  • MariaDB 5.5.48
  • MySQL Workbench 6.3

よくわからないという方は、XAMPをインストールすると簡単に筆者と同じ環境を構築できます。以下のサイトで紹介されています。
WINDOWS XAMPP にて LARAVEL をインストール (XAMPP V1.8.3インストール)

問題として使用するデータは以下からダウンロード可能です。phpMyAdminからデータベース(worldcup2014)を作成しインポートしておいてください。
worldcup2014.zip

  • このエントリーをはてなブックマークに追加

PAGE TOP