ホームに戻る
SQL コース
データベース操作の基本となるSQL言語を体系的に学びましょう
初
初級
無料で学習可能
初級基本構文
問題1: SELECT - 基本的なデータ取得
データベースからデータを取得する最も基本的なSELECT文を学びます。SELECTは「選択する」という意味で、データベースのテーブルから情報を取り出すために使用します。アスタリスク(*)を使うと、テーブルのすべての列(カラム)を一度に取得できます。
初級基本構文
問題2: SELECT列指定 - 特定カラムの選択
必要な列だけを選択する方法を学びます。すべての列を取得する代わりに、特定の列名を指定することで、必要なデータだけを効率的に取得できます。列名はカンマで区切って複数指定でき、取得されるデータの順序は指定した順番になります。
初級データの絞り込み
問題3: WHERE - 条件指定
WHERE句を使って特定の条件に合うデータだけを取得する方法を学びます。WHERE句は「どこで」という意味で、テーブルから条件に一致する行だけを絞り込みます。比較演算子と組み合わせて、価格や数量などの数値条件を指定できます。
初級データの絞り込み
問題4: WHERE演算子 - 比較条件
WHERE句で使用できる様々な比較演算子を学びます。等しい(=)だけでなく、大きい(>)、小さい(<)、等しくない(!=または<>)など、様々な条件を指定できます。これらの演算子を使いこなすことで、柔軟なデータ検索が可能になります。
初級データの絞り込み
問題5: AND/OR - 複数条件の組み合わせ
複数の条件を組み合わせて検索する方法を学びます。AND演算子は「かつ」の意味で、すべての条件を満たすデータを検索します。OR演算子は「または」の意味で、いずれかの条件を満たすデータを検索します。複雑な検索条件を作成できます。
初級データの絞り込み
問題6: IN - 複数値の条件指定
IN演算子を使って、複数の値のいずれかに一致するデータを検索する方法を学びます。OR演算子を複数使う代わりに、IN演算子を使うことでコードがシンプルになります。カテゴリや部門など、特定のリストに含まれるデータを効率的に検索できます。
初級データの絞り込み
問題7: NOT IN - 複数値の否定条件
NOT IN演算子を使って、指定した値のリストに含まれないデータを検索する方法を学びます。特定の部門やカテゴリを除外したい場合に便利です。IN演算子の否定形として、除外条件を簡潔に表現できます。
初級データの絞り込み
問題8: BETWEEN - 範囲指定
BETWEEN演算子を使って、数値や日付の範囲を指定する方法を学びます。最小値と最大値を指定することで、その範囲内のデータを効率的に検索できます。価格帯や期間を指定する場合によく使用される便利な演算子です。
初級データの絞り込み
問題9: LIKE - パターンマッチング
LIKE演算子とワイルドカードを使って、文字列のパターンマッチングを行う方法を学びます。%は任意の文字列、_は任意の1文字を表します。メールアドレスのドメインや名前の一部を検索する際に非常に便利です。
初級データの絞り込み
問題10: NOT LIKE - パターンの否定
NOT LIKE演算子を使って、特定のパターンに一致しないデータを検索する方法を学びます。特定の文字列パターンを除外したい場合に便利です。USBで始まらない商品や、特定のドメイン以外のメールアドレスを検索する際に使用します。
初級データの絞り込み
問題11: IS NULL/IS NOT NULL - NULL値の扱い
データベースでNULL値を扱う方法を学びます。NULLは「値が存在しない」ことを表す特殊な値です。通常の比較演算子(=や!=)では検索できないため、IS NULLやIS NOT NULLを使用する必要があります。
初級基本構文
問題12: ORDER BY - 昇順ソート
ORDER BY句を使ってクエリ結果を並び替える方法を学びます。デフォルトでは昇順(小さい順)でソートされます。数値、文字列、日付など、様々なデータ型で並び替えが可能です。見やすい順序でデータを表示できます。
初級基本構文
問題13: ORDER BY DESC/複数列 - 降順ソートと複数列ソート
降順ソートと複数列でのソートを学びます。DESCキーワードを使うと大きい順(降順)に並べ替えられます。また、複数の列を指定することで、第1ソートキー、第2ソートキーのような優先順位付きのソートが可能です。
初級基本構文
問題14: LIMIT/OFFSET - 件数制限とオフセット
検索結果の件数を制限する方法を学びます。LIMITで取得件数を指定し、OFFSETで開始位置を指定できます。大量のデータから一部だけを取得したり、ページネーション(ページ分割)を実装する際に重要な機能です。
初級基本構文
問題15: DISTINCT - 重複除去
重複した値を除去して一意な値のみを取得する方法を学びます。DISTINCTキーワードを使うと、同じ値が複数回出現しても1回だけ表示されます。カテゴリや部門など、種類を把握したい場合に便利な機能です。
初級基本構文
問題16: エイリアス - カラム名・テーブル名の別名
列やテーブルに別名(エイリアス)を付ける方法を学びます。ASキーワードを使って、計算結果や長い列名に分かりやすい名前を付けたり、テーブル名を短縮したりできます。コードの可読性向上に役立ちます。
初級集計
問題17: COUNT - 件数カウント
レコード数を数える集計関数COUNTを学びます。COUNT(*)で全レコード数、COUNT(列名)でNULL以外の値の数を取得できます。データの総数や種類数を把握する際の基本的な関数です。
初級集計
問題18: SUM - 合計値計算
数値の合計を計算する集計関数SUMを学びます。価格の合計や在庫金額の計算など、ビジネスで頻繁に使用される重要な関数です。GROUP BYと組み合わせることで、カテゴリ別の合計なども計算できます。
初級集計
問題19: AVG - 平均値計算
数値の平均を計算する集計関数AVGを学びます。商品の平均価格や平均在庫数など、データの傾向を把握する際に重要な関数です。条件を組み合わせて特定範囲の平均も計算できます。
初級集計
問題20: MAX - 最大値取得
最大値を取得する集計関数MAXを学びます。最高価格や最大在庫数など、データの最大値を見つける際に使用します。GROUP BYと組み合わせて、グループ内の最大値も取得できます。
初級集計
問題21: MIN - 最小値取得
最小値を取得する集計関数MINを学びます。最低価格や最小在庫数など、データの最小値を見つける際に使用します。条件を組み合わせて、特定範囲内での最小値も取得できます。
初級データの変更
問題22: INSERT - 単一行の挿入
データベースに新しいデータを追加するINSERT文を学びます。テーブルに新しい行を挿入する最も基本的な操作です。列名と値を正しく対応させることが重要です。
初級データの変更
問題23: INSERT複数行 - 複数行の一括挿入
複数のデータを一度に挿入する方法を学びます。1つのINSERT文で複数の行を挿入することで、効率的にデータを追加できます。大量データの初期投入時などに便利な機能です。
初級データの変更
問題24: UPDATE - データ更新(条件指定含む)
既存のデータを更新するUPDATE文を学びます。WHERE句で条件を指定して、特定のレコードだけを更新できます。価格変更や在庫数の調整など、データの修正に使用する重要な操作です。
初級データの変更
問題25: DELETE - データ削除(条件指定含む)
データを削除するDELETE文を学びます。WHERE句で条件を指定して、特定のレコードだけを削除できます。不要なデータの削除に使用しますが、削除は取り消せないため慎重に実行する必要があります。
中
中級
無料で学習可能
中級テーブル操作
問題26: CREATE TABLE - 基本的なテーブル作成
新しいテーブルを作成するCREATE TABLE文を学びます。列名、データ型、制約を指定してテーブル構造を定義する基本的な操作です。データベース設計の第一歩となる重要な命令で、適切なデータ型と制約の選択が後々のデータ管理に大きく影響します。
中級テーブル操作
問題27: ALTER TABLE - テーブル構造の変更
既存テーブルの構造を変更するALTER TABLE文を学びます。列の追加、変更、削除など、運用中のテーブルを修正する際に使用します。データを保持したままテーブル構造を変更できるため、システムの拡張や改修時に重要な役割を果たします。
中級テーブル操作
問題28: DROP TABLE - テーブル削除
テーブルを完全に削除するDROP TABLE文を学びます。テーブルとそのデータ、インデックス、制約などすべてが削除される強力な命令です。削除は取り消せないため、本番環境では特に慎重に実行する必要があります。
中級テーブル操作
問題29: TRUNCATE - 全データの高速削除
テーブルのすべてのデータを高速に削除するTRUNCATE文を学びます。DELETE文との違いを理解し、適切な場面で使い分けることが重要です。自動採番のリセットやトランザクションログの扱いなど、DELETE文とは異なる特性を持っています。
中級制約
問題30: PRIMARY KEY - 主キー制約
テーブルの各行を一意に識別する主キー制約を学びます。主キーは重複を許さず、NULL値も不可という特性を持ちます。データベース設計の基本であり、他のテーブルとの関連付けや検索の高速化にも重要な役割を果たします。
中級制約
問題31: FOREIGN KEY - 外部キー制約
テーブル間の参照整合性を保つ外部キー制約を学びます。他のテーブルの主キーを参照することで、データの一貫性を保証します。親テーブルに存在しない値の挿入を防ぎ、関連データの整合性を維持する重要な機能です。
中級制約
問題32: UNIQUE - 一意性制約
列の値が重複しないことを保証するUNIQUE制約を学びます。メールアドレスや社員番号など、一意であるべきデータに使用します。主キーと異なり、NULL値を許可し、複数の列に設定できる柔軟な制約です。
中級制約
問題33: CHECK - チェック制約
データの妥当性を検証するCHECK制約を学びます。価格が正の値、在庫が0以上など、ビジネスルールに基づいた条件を設定できます。不正なデータの挿入を防ぎ、データの品質を保つための重要な制約です。
中級制約
問題34: AUTO_INCREMENT - 自動採番
新しい行が挿入されるたびに自動的に番号を割り当てるAUTO_INCREMENT機能を学びます。主キーとして使用されることが多く、一意のIDを簡単に生成できます。手動でのID管理が不要になり、効率的なデータ管理が可能になります。
中級結合
問題35: INNER JOIN - 内部結合
両方のテーブルに一致するデータのみを取得するINNER JOINを学びます。最も基本的な結合方法で、顧客と注文、商品とカテゴリなど、関連するデータを組み合わせる際に使用します。リレーショナルデータベースの核心的な機能です。
中級結合
問題36: LEFT JOIN - 左外部結合
左側のテーブルのすべての行と、右側の一致する行を取得するLEFT JOINを学びます。顧客一覧に注文情報を追加する際など、左側のデータを全て保持したい場合に使用します。一致しない場合はNULLが表示されます。
中級結合
問題37: RIGHT JOIN - 右外部結合
右側のテーブルのすべての行と、左側の一致する行を取得するRIGHT JOINを学びます。LEFT JOINの逆で、右側のデータを全て保持したい場合に使用します。実務ではLEFT JOINの方が一般的ですが、理解は重要です。
中級結合
問題38: FULL OUTER JOIN - 完全外部結合
両方のテーブルのすべての行を取得するFULL OUTER JOINを学びます。一致する行は結合され、一致しない行はNULLで補完されます。データの完全性チェックや、両テーブルの差分確認に便利です。
中級結合
問題39: CROSS JOIN - クロス結合
すべての行の組み合わせを生成するCROSS JOINを学びます。デカルト積とも呼ばれ、商品と色の全組み合わせ作成など、すべての可能性を列挙したい場合に使用します。結果の行数は両テーブルの行数の積になります。
中級結合
問題40: 複数テーブルJOIN - 3つ以上のテーブル結合
3つ以上のテーブルを結合する方法を学びます。注文、顧客、商品、注文明細など、複数の関連テーブルから必要な情報を組み合わせます。実務では頻繁に使用される、複雑だが重要なクエリパターンです。
中級結合
問題41: SELF JOIN - 自己結合
同じテーブルを自分自身と結合するSELF JOINを学びます。階層構造や関連データの比較に使用し、上司と部下の関係、同僚関係、類似商品の検索などに活用できます。テーブルエイリアスが必須の技法です。
中級結合
問題42: JOIN条件 - ON句とUSING句
JOIN時の条件指定方法を学びます。ON句では任意の結合条件を指定でき、USING句では同名カラムでの結合を簡潔に記述できます。適切な方法を選択することで、クエリの可読性が向上します。
中級グループ化
問題43: GROUP BY - 単一列でのグループ化
GROUP BYを使用してデータをグループ化し、集計関数と組み合わせて統計情報を取得します。売上分析、在庫管理、レポート作成など、ビジネス分析の基礎となる重要なSQL機能です。
中級グループ化
問題44: GROUP BY複数列 - 複数列でのグループ化
複数のカラムでグループ化を行い、より細かい分析を実行します。年月別売上、商品カテゴリ・ブランド別集計など、多次元での分析が可能になり、詳細なビジネス洞察を得られます。
中級グループ化
問題45: HAVING - グループ化後の条件指定
HAVINGを使用してグループ化された結果に条件を適用します。売上が一定額以上の商品カテゴリのみ表示、注文数が多い顧客の抽出など、集計後のフィルタリングに使用します。
中級グループ化
問題46: GROUP BY + ORDER BY - グループ化とソートの組み合わせ
GROUP BYとORDER BYを組み合わせて、集計結果を並べ替えます。売上ランキング、人気商品順位、成績順などの表示に使用し、分析結果を見やすく整理できます。
中級グループ化
問題47: GROUP_CONCAT/STRING_AGG - 文字列集約関数
グループ内の値を連結して一つの文字列にする集約関数を学びます。商品リスト、タグ一覧、カテゴリ内の項目表示など、複数の値をまとめて表示したい場合に使用します。MySQL、PostgreSQL、SQL Serverで関数名が異なります。
中級サブクエリ
問題48: サブクエリWHERE - WHERE句でのサブクエリ
WHERE句でサブクエリを使用して動的な条件指定を行います。平均値より高い価格の商品、最新の注文日の取得など、集計結果を条件として使用できます。メインクエリとサブクエリで異なるテーブルを参照することも可能です。
中級サブクエリ
問題49: サブクエリFROM - FROM句でのサブクエリ
FROM句でサブクエリを使用して、一時的な結果セットを作成します。複雑な集計結果の再利用、中間テーブルの作成など、段階的なデータ処理に便利です。サブクエリにはエイリアス(別名)が必須です。
中級サブクエリ
問題50: EXISTS - 存在確認
EXISTSを使用して関連レコードの存在を確認します。注文履歴のある顧客、在庫のある商品など、関連テーブルにデータが存在するかどうかで絞り込みを行います。INより効率的な場合が多く、大規模データで有効です。
中級サブクエリ
問題51: NOT EXISTS - 非存在確認
NOT EXISTSを使用して関連レコードが存在しないことを確認します。一度も注文されていない商品、最近活動のない顧客など、関連データが存在しない場合の絞り込みに使用します。除外条件の指定に便利です。
中級サブクエリ
問題52: 相関サブクエリ - 外部クエリ参照
外部クエリの値を参照する相関サブクエリを学びます。部署平均より高い給与の従業員、カテゴリ内最高価格の商品など、行ごとに異なる条件での比較が可能です。通常のサブクエリより複雑ですが強力です。
中級サブクエリ
問題53: ALL/ANY - サブクエリとの比較演算子
サブクエリの結果セットと比較するALL/ANY演算子を学習します。ANYは条件を満たす値が1つでもあれば真、ALLは全ての値に対して条件が真の場合のみ真となります。複数値との柔軟な比較が可能です。
中級高度な演算子
問題54: UNION/UNION ALL - 結果の結合
複数のSELECT文の結果を結合するUNION演算子を学習します。UNIONは重複を除去し、UNION ALLは全ての行を保持します。異なるテーブルやクエリの結果を1つにまとめる際に使用します。列数と型が一致する必要があります。
中級高度な演算子
問題55: INTERSECT - 集合の交差
2つのクエリ結果の共通部分を取得するINTERSECT演算子を学習します。両方の結果セットに存在する行のみを返します。オンラインと店舗の両方で購入した顧客の抽出など、共通要素の検索に使用します。注意:MySQLではINTERSECTはサポートされていないため、INNER JOINやEXISTSを使用した代替方法が必要です。
中級高度な演算子
問題56: EXCEPT/MINUS - 集合の差
最初のクエリ結果から2番目のクエリ結果を除外するEXCEPT演算子を学習します。1番目にあって2番目にない行を返します。オンライン限定顧客の抽出など、差分検索に使用します。OracleではMINUSを使用します。
中級高度な演算子
問題57: CASE WHEN - 条件分岐
条件に応じて異なる値を返すCASE式を学習します。複数の条件を順番に評価し、最初に真となった条件の結果を返します。成績のランク付けや価格帯の分類など、データの動的な分類に使用します。
中級高度な演算子
問題58: COALESCE/IFNULL - NULL値の処理
NULL値を代替値に置き換える関数を学習します。COALESCEは複数の引数から最初の非NULL値を返し、IFNULLは2つの引数でNULL処理をします。連絡先情報の補完やデフォルト値の設定に使用します。
中級テーブル操作
問題71: VIEW作成 - ビューの作成と使用
ビューを作成して複雑なクエリを簡潔に再利用する方法を学習します。頻繁に使用するクエリをビューとして保存し、テーブルのように扱えます。セキュリティやデータの抽象化にも役立ちます。
中級テーブル操作
問題73: INDEX作成 - 単一列インデックス
インデックスを作成してクエリのパフォーマンスを向上させる方法を学習します。適切なインデックスにより検索速度が大幅に改善しますが、更新処理には影響があります。
中級テーブル操作
問題74: 複合INDEX - 複数列インデックス
複数の列を組み合わせたインデックスを作成する方法を学習します。複合条件での検索を高速化し、カバリングインデックスによりテーブルアクセスを削減できます。
中級テーブル操作
問題75: TEMPORARY TABLE - 一時テーブル
セッション内でのみ存在する一時テーブルを作成する方法を学習します。複雑な処理の中間結果を保存し、パフォーマンスを向上させるために使用されます。
中級高度な演算子
問題76: TRANSACTION - BEGIN, COMMIT, ROLLBACK
トランザクション制御を学習します。複数の操作を一つの単位として扱い、全て成功するか全て失敗するかを保証します。データの整合性を保つために重要な機能です。
上
上級
無料で学習可能
上級文字列関数
問題59: 文字列関数 - CONCAT, SUBSTRING, LENGTH
文字列を操作する基本的な関数を学習します。CONCATで文字列を結合し、SUBSTRINGで部分文字列を抽出し、LENGTHで文字数を取得します。名前のフォーマット、コードの抽出、文字数制限など実践的な用途があります。
上級日付関数
問題60: 日付関数 - DATE_FORMAT, DATEDIFF, DATE_ADD
日付を操作する関数を学習します。DATE_FORMATで日付を整形し、DATEDIFFで日数差を計算し、DATE_ADDで日付を加算します。年齢計算、期限管理、スケジュール処理など実務で頻繁に使用します。
上級数値関数
問題61: 数値関数 - ROUND, CEILING, FLOOR
数値の丸め処理を行う関数を学習します。ROUNDで指定桁数に丸め、CEILINGで切り上げ、FLOORで切り下げます。価格計算、統計処理、レポート作成などで必須の機能です。
上級関数
問題62: 型変換 - CAST, CONVERT
データ型を変換するCAST関数とCONVERT関数を学習します。文字列を数値に、日付を特定の形式に変換するなど、異なるデータ型間の変換に使用されます。
上級関数
問題63: 正規表現 - REGEXP, RLIKE
パターンマッチングのための正規表現を学習します。メールアドレスの検証、電話番号形式のチェック、複雑な文字列パターンの検索など、高度な文字列操作に使用されます。
上級関数
問題64: ROW_NUMBER - 行番号付与
結果セットに連番を付与するウィンドウ関数を学習します。順位付けやページング処理、トップN分析などで活用されます。同じ値でも異なる番号が割り当てられます。
上級関数
問題65: RANK/DENSE_RANK - ランキング機能
順位付けを行うウィンドウ関数を学習します。RANKは同順位の後に番号を飛ばし、DENSE_RANKは飛ばしません。売上ランキングや成績順位など、ビジネス分析に活用されます。
上級関数
問題66: LAG/LEAD - 前後の行参照
現在の行から前後の行の値を参照するウィンドウ関数を学習します。時系列データの比較、前月比の計算、連続データの差分分析などに活用されます。
上級関数
問題67: PARTITION BY - ウィンドウの分割
ウィンドウ関数でデータをグループごとに分割する方法を学習します。部門別ランキング、カテゴリ別累計、グループ内での相対位置の計算などに使用されます。
上級関数
問題68: 累積集計 - SUM() OVER, AVG() OVER
ウィンドウ関数を使用した累積集計を学習します。売上の累計、移動平均、累積成長率など、時系列データの分析に欠かせない機能です。
上級高度な演算子
問題69: WITH句(CTE) - 共通テーブル式
WITH句を使用して一時的な名前付き結果セット(CTE: Common Table Expression)を定義する方法を学習します。複雑なクエリを読みやすく整理し、再利用可能な中間結果を作成できます。
上級高度な演算子
問題70: 再帰CTE - 階層データ処理
再帰的な共通テーブル式を使用して階層構造データを処理する方法を学習します。組織図、カテゴリツリー、部品表など、親子関係を持つデータの探索に使用されます。
上級テーブル操作
問題72: MATERIALIZED VIEW - マテリアライズドビュー
マテリアライズドビューを作成して、クエリ結果を物理的に保存する方法を学習します。通常のビューと異なり、実際のデータを保存するため高速ですが、定期的な更新が必要です。
上級高度な演算子
問題77: EXPLAIN - 実行計画の確認
クエリの実行計画を確認する方法を学習します。インデックスの使用状況、テーブルスキャンの有無、結合方法などを把握し、パフォーマンスチューニングに活用します。
上級高度な演算子
問題78: クエリ最適化 - パフォーマンス改善
クエリのパフォーマンスを改善する手法を学習します。サブクエリからJOINへの書き換え、インデックスの活用、結果件数の制限など、実践的な最適化テクニックを習得します。
上級テーブル操作
問題79: TRIGGER - トリガーの作成
データベースイベントに応じて自動実行されるトリガーを作成する方法を学習します。更新時のタイムスタンプ記録、監査ログの作成、データ検証など、自動化処理に活用されます。
上級高度な演算子
問題80: STORED PROCEDURE - ストアドプロシージャ
一連のSQL文をまとめて保存・実行できるストアドプロシージャを作成する方法を学習します。複雑なビジネスロジックの実装、パフォーマンスの向上、セキュリティの強化に活用されます。