基本情報技術者試験(FE)では、**SQL(Structured Query Language)**の基本操作が頻出です。出題される内容は、実務でもよく使われるものが多く、SELECT文やテーブル結合、データの更新・削除といった基本操作の理解が問われます。
よく出題されるSQL基本操作
1. SELECT文の使い方
SQLの基礎中の基礎です。指定したカラムを抽出する文法は確実にマスターしておきましょう。
SELECT name, age FROM users;
SQLの基本中の基本、それが SELECT文 です。データベースから必要なデータを取り出すための命令で、最初に学ぶべきSQL文でもあります。
SELECT文とは?
SELECT
文は、「データベースから指定した列(カラム)のデータを取得する」命令です。最もシンプルな形は以下の通りです。
SELECT カラム名 FROM テーブル名;
例:
SELECT name FROM users;
このSQLは、users
テーブルからname
列のデータをすべて取得します。
よく使うSELECT文のバリエーション
1. 複数カラムを取得
SELECT name, email FROM users;
複数のカラムをカンマ区切りで指定します。
2. すべてのカラムを取得(アスタリスク使用)
SELECT * FROM users;
全列を取得したいときに便利ですが、必要な列だけを指定する方がパフォーマンスに優れます。
3. WHERE句で条件を指定
SELECT * FROM users WHERE age > 30;
特定の条件に一致する行のみを取得します。
4. ORDER BYで並び替え
SELECT * FROM users ORDER BY created_at DESC;
結果を日付や数値でソートします。ASC
は昇順、DESC
は降順です。
5. LIMITで件数を制限
SELECT * FROM users LIMIT 10;
結果を10件までに制限します。ページング処理でも使用されます。
よくあるミスと注意点
- セミコロン
;
を忘れない - カラム名やテーブル名のスペルミスに注意
- 大文字小文字は区別されないが、慣例としてSQLキーワードは大文字で書く
2. WHERE句で条件指定
データの絞り込みに使います。複数条件ではAND
やOR
も使われます。
SELECT * FROM users WHERE age > 30 AND city = 'Tokyo';
SQLにおいて、データベースから特定の条件に一致するデータだけを抽出するには WHERE
句を使います。SELECT
文と組み合わせて使うことで、必要な情報だけを効率的に取り出すことができます。
基本構文
SELECT カラム名 FROM テーブル名 WHERE 条件;
例:
SELECT * FROM users WHERE age >= 20;
このSQLは、users
テーブルから年齢 (age
) が20歳以上のユーザー情報をすべて取得します。
よく使う条件式のパターン
1. 数値や文字列の比較
-- 数値の等しい条件
SELECT * FROM products WHERE price = 1000;
-- 文字列の一致
SELECT * FROM users WHERE name = '田中';
2. 大小比較(>, <, >=, <=)
SELECT * FROM users WHERE age < 30;
3. 不等号(!= や <>)
SELECT * FROM users WHERE status != 'inactive';
4. AND / OR 複数条件の組み合わせ
SELECT * FROM users WHERE age >= 18 AND gender = 'male';
SELECT * FROM users WHERE city = '東京' OR city = '大阪';
5. BETWEEN 範囲指定
SELECT * FROM products WHERE price BETWEEN 1000 AND 3000;
6. IN 指定リストに含まれるか
SELECT * FROM users WHERE prefecture IN ('東京', '大阪', '愛知');
7. LIKE 曖昧検索(部分一致)
SELECT * FROM users WHERE name LIKE '佐藤%'; --「佐藤」で始まる名前
SELECT * FROM users WHERE email LIKE '%@gmail.com'; -- Gmailのメール
NULLに関する条件
NULL(値が存在しない)に対しては =
や !=
は使えません。
SELECT * FROM users WHERE deleted_at IS NULL;
SELECT * FROM users WHERE deleted_at IS NOT NULL;
注意点
- 文字列はシングルクォートで囲む(例:
'東京'
) - 条件が複雑な場合は カッコでグループ化することで意図した順序を保つ
- データ型の違いに注意(数値と文字列は区別される)
WHERE
句は、SQLでデータを抽出する際のフィルタリングの中心的な機能です。条件の組み合わせ次第で、非常に柔軟なデータ取得が可能になります。基本的な比較演算に加えて、BETWEEN
や LIKE
、IN
なども覚えておくと実務で大いに役立ちます。
3. ORDER BYで並び替え
昇順・降順でデータを並べます。
SELECT * FROM products ORDER BY price DESC;
SQLでは、検索結果を特定の基準で並び替えたいときに ORDER BY
句を使用します。たとえば「価格の安い順」「登録日の新しい順」など、見やすく・意味のある順序でデータを表示するために欠かせない機能です。
基本構文
SELECT カラム名 FROM テーブル名 ORDER BY 並び替えの基準 [ASC|DESC];
ASC
:昇順(小さい→大きい、古い→新しい)※省略可DESC
:降順(大きい→小さい、新しい→古い)
使用例
1. 年齢の昇順に並び替え
SELECT * FROM users ORDER BY age ASC;
2. 登録日の降順に並び替え(新しい順)
SELECT * FROM users ORDER BY created_at DESC;
3. 複数の条件で並び替え
SELECT * FROM users ORDER BY prefecture ASC, age DESC;
この例では、都道府県ごとにグループ化され、その中で年齢が高い順に並びます。
カラム番号で指定する
カラム名の代わりに、SELECTで指定したカラムの**位置番号(1から始まる)**でも並び替え可能です。
SELECT name, age FROM users ORDER BY 2 DESC;
この例では、age
(2番目のカラム)で降順に並び替えます。
※可読性・保守性の観点から、カラム名で指定する方が推奨されます。
NULLの扱い
データベースによっては、NULLの並び順が異なる場合があります。例えば:
- PostgreSQL では
NULLS FIRST
/NULLS LAST
を明示的に指定可能 - MySQL では昇順で
NULL
は最初、降順で最後に表示されるのが一般的
SELECT * FROM users ORDER BY last_login DESC NULLS LAST;
ORDER BY
を使えば、SQLの検索結果に視覚的な意味や優先順位を持たせることができます。ビジネスレポートや一覧表示では特に活躍する機能なので、昇順・降順・複数条件などをしっかり理解しておくと実務でも役立ちます。
4. GROUP BYと集計関数
集計とグループ化も頻出。COUNT
, SUM
, AVG
, MAX
, MIN
などと一緒に使います。
SELECT department, COUNT(*) FROM employees GROUP BY department;
SQLでデータをグループ単位に集計したいときに使うのが GROUP BY
句と集計関数(COUNT, SUM, AVG, MAX, MINなど)です。たとえば「都道府県ごとのユーザー数」や「月ごとの売上合計」といったデータ分析に欠かせません。
基本構文
SELECT グループ化するカラム, 集計関数(対象カラム)
FROM テーブル名
GROUP BY グループ化するカラム;
主な集計関数
COUNT(*)
:件数をカウントSUM(カラム名)
:合計AVG(カラム名)
:平均MAX(カラム名)
:最大値MIN(カラム名)
:最小値
使用例
1. 都道府県ごとのユーザー数
SELECT prefecture, COUNT(*) AS user_count
FROM users
GROUP BY prefecture;
2. 商品カテゴリごとの売上合計
SELECT category, SUM(price) AS total_sales
FROM orders
GROUP BY category;
3. 年代ごとの平均年収
SELECT FLOOR(age / 10) * 10 AS age_group, AVG(salary) AS avg_salary
FROM employees
GROUP BY FLOOR(age / 10) * 10;
GROUP BYとORDER BYの併用
集計結果を並び替えたいときは ORDER BY
を使います。
SELECT category, SUM(price) AS total_sales
FROM orders
GROUP BY category
ORDER BY total_sales DESC;
GROUP BYとWHERE句の違い
WHERE
:集計前にデータを絞り込むHAVING
:集計後に条件をかける
例:売上が10万円を超えるカテゴリだけ表示
SELECT category, SUM(price) AS total_sales
FROM orders
GROUP BY category
HAVING total_sales > 100000;
GROUP BY
と集計関数は、SQLでデータを意味のある単位にまとめて数値を分析するために欠かせません。WHERE句との違いやHAVING句の使い方を理解することで、さらに高度なデータ処理が可能になります。データ分析やレポート作成の第一歩として、しっかり習得しておきましょう。
5. JOIN句によるテーブル結合
複数のテーブルを関連づける操作です。特にINNER JOINとLEFT JOINは頻出です。
SELECT orders.id, customers.name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.id;
SQLでは、複数のテーブルを結び付けて一つのデータとして扱うために JOIN句(ジョイン句) を使います。実際の業務では、顧客情報と注文情報など、複数のテーブルを関連付ける処理が頻繁に行われます。
JOINの基本形
SELECT テーブル1.カラム名, テーブル2.カラム名
FROM テーブル1
JOIN テーブル2 ON テーブル1.共通カラム = テーブル2.共通カラム;
主なJOINの種類と特徴
1. INNER JOIN(内部結合)
一致するデータのみ取得
SELECT customers.name, orders.order_date
FROM customers
INNER JOIN orders ON customers.id = orders.customer_id;
2. LEFT JOIN(左外部結合)
左側テーブルを基準に、対応がない右側のデータはNULLで補完
SELECT customers.name, orders.order_date
FROM customers
LEFT JOIN orders ON customers.id = orders.customer_id;
3. RIGHT JOIN(右外部結合) ※一部のDBで対応
右側テーブルを基準に、左側がNULLになる場合も含めて取得
SELECT customers.name, orders.order_date
FROM customers
RIGHT JOIN orders ON customers.id = orders.customer_id;
4. FULL OUTER JOIN(完全外部結合)
両方のテーブルのすべてのデータを取得(どちらか片方に対応がなくても)
※MySQLではサポートされていないため、UNIONなどで代替
SELECT customers.name, orders.order_date
FROM customers
FULL OUTER JOIN orders ON customers.id = orders.customer_id;
別名(エイリアス)を使って見やすく
SELECT c.name, o.order_date
FROM customers AS c
JOIN orders AS o ON c.id = o.customer_id;
JOINの活用例
- ユーザーと投稿を結合して、どのユーザーがどの投稿をしたかを一覧表示
- 注文テーブルと商品テーブルを結合して、注文ごとの商品名と価格を取得
- 社員テーブルと部署テーブルを結合して、社員の所属部署名を取得
注意点
- 結合条件が間違っていると意図しないデータが出る(N×Mの膨張)
- 結合キーにはインデックスを付けるとパフォーマンス改善につながる
- 同じ名前のカラムがあるときはテーブル名を明示する
JOIN句
を使うことで、複雑なリレーションのあるデータベースでも一貫性を保ちながら横断的に情報を取得できます。INNER JOIN を基本に、LEFT JOIN など用途に応じて使い分け、データ分析やアプリ開発に活かしましょう。
出題パターンの例
- SQLの出力結果を選ばせる問題
→ 実際にSQLを読んで結果セットを想像できるかが問われます。 - 正しいSQL文の選択
→ 文法エラーを含む選択肢から正解を選ばせます。 - 結合やサブクエリの使用有無を問う問題
→ 「このようなデータ取得にはどのSQLが適しているか」を考えさせる問題です。
効率的な対策方法
- SQL実行環境(SQLite, MySQL, PostgreSQLなど)を使って練習する
- 紙にテーブル構造を書いて実際に出力を手で追う
- 過去問を繰り返し解き、パターンに慣れる
まとめ
SQLの基本操作は、知識だけでなく実際に手を動かして体得することが重要です。SELECT文の構文や結合の考え方を正確に理解していれば、本番でもスムーズに解答できるはずです。
基本情報技術者試験では、SQLは高得点を狙いやすい分野。確実に押さえておきましょう!