SQL の基礎

作成: 2026.03.24更新: 2026.03.24

SQL の基礎とは

SQL(Structured Query Language)は、リレーショナルデータベース(RDB)を操作するための言語である。1970 年代に IBM で開発され、ISO / JIS で標準規格化されている。RDB 製品(Oracle、PostgreSQL、MySQL 等)はそれぞれ独自の拡張を持つが、基本的な構文はどの製品でも共通である。

SQL は大きく以下の 3 種類に分類される。

分類正式名称主な操作
DMLData Manipulation LanguageSELECT, INSERT, UPDATE, DELETE
DDLData Definition LanguageCREATE TABLE, ALTER TABLE, DROP TABLE
DCLData Control LanguageGRANT, REVOKE, COMMIT, ROLLBACK

本記事では、開発者が最も頻繁に使う DML を中心に解説する。

なぜ SIer で重要か

SIer の開発現場において、SQL は 最も使用頻度の高いスキルの一つ である。業務システムの開発では日常的に以下の場面で SQL が必要になる。

  • アプリケーションからのデータアクセス処理の実装(MyBatis の XML に SQL を記述)
  • テストデータの準備や確認
  • 障害調査時のデータ確認
  • バッチ処理の SQL 設計
  • テーブル設計のレビュー

「プログラミング言語はプロジェクトごとに変わるが、SQL はどのプロジェクトでも使う」と言われるほど、SQL はSIer の開発者にとって不可欠なスキルである。

基本概念

SELECT(データの取得)

最も基本かつ頻繁に使う SQL。テーブルからデータを取得する。

-- 全カラムを取得
SELECT * FROM users;

-- 特定のカラムを取得
SELECT name, email FROM users;

-- 条件を指定して取得(WHERE)
SELECT * FROM users WHERE dept_id = 10;

-- 並び替え(ORDER BY)
SELECT * FROM users ORDER BY name ASC;

-- 件数を制限
SELECT * FROM users LIMIT 10;

INSERT(データの挿入)

テーブルに新しい行を追加する。

-- 1 行挿入
INSERT INTO users (name, email, dept_id)
VALUES ('田中太郎', 'tanaka@example.com', 10);

UPDATE(データの更新)

既存の行のデータを更新する。

-- 条件に一致する行を更新
UPDATE users SET email = 'new@example.com' WHERE id = 1;

注意: WHERE 句を付け忘れるとテーブルの全行が更新されてしまう。本番環境での UPDATE は特に慎重に行う必要がある。

DELETE(データの削除)

テーブルから行を削除する。

-- 条件に一致する行を削除
DELETE FROM users WHERE id = 1;

注意: UPDATE と同様、WHERE 句の付け忘れは全行削除につながる。

WHERE(条件指定)

データの絞り込みに使う条件句。さまざまな演算子が使用できる。

-- 等値比較
WHERE dept_id = 10

-- 範囲指定
WHERE age BETWEEN 20 AND 30

-- 部分一致(LIKE)
WHERE name LIKE '%田中%'

-- 複数条件の組み合わせ
WHERE dept_id = 10 AND status = 'active'

-- NULL の判定
WHERE deleted_at IS NULL

JOIN(テーブルの結合)

複数のテーブルを関連づけてデータを取得する。SIer の業務システムでは、ほぼすべてのクエリで JOIN が使われる。

-- 内部結合(INNER JOIN): 両方のテーブルに一致するデータのみ取得
SELECT u.name, d.name AS dept_name
FROM users u
INNER JOIN departments d ON u.dept_id = d.id;

-- 左外部結合(LEFT JOIN): 左テーブルの全行 + 右テーブルの一致する行
SELECT u.name, d.name AS dept_name
FROM users u
LEFT JOIN departments d ON u.dept_id = d.id;
JOIN の種類説明
INNER JOIN両テーブルで一致する行のみ
LEFT JOIN左テーブルの全行 + 右テーブルの一致する行
RIGHT JOIN右テーブルの全行 + 左テーブルの一致する行
FULL OUTER JOIN両テーブルの全行

GROUP BY(集計)

データをグループ化して集計する。

-- 部署ごとのユーザー数を集計
SELECT dept_id, COUNT(*) AS user_count
FROM users
GROUP BY dept_id;

-- 集計結果に条件を付ける(HAVING)
SELECT dept_id, COUNT(*) AS user_count
FROM users
GROUP BY dept_id
HAVING COUNT(*) >= 5;

主な集計関数は以下の通り。

関数説明
COUNT行数を数える
SUM合計値
AVG平均値
MAX最大値
MIN最小値

SIer での使われ方

MyBatis の XML での SQL 記述

SIer の Java 開発では、MyBatis の XML ファイルに SQL を記述することが多い。動的 SQL(条件によって WHERE 句を変える等)の記述も頻繁に行う。

障害調査での SQL

本番環境で障害が発生した際、原因調査のためにデータベースの内容を SQL で直接確認することがある。このとき、SELECT 文を素早く書いてデータの状態を把握するスキルが求められる。

SQL のレビュー

SIer のプロジェクトでは、パフォーマンスに影響する SQL のレビューが行われることが多い。インデックスの利用状況や、不要な全テーブルスキャンが発生していないかなどが確認される。

よく使うテクニック

  • サブクエリ --- SELECT の中に SELECT を入れ子にする
  • EXISTS --- サブクエリの結果が存在するかどうかで条件を判定
  • CASE 式 --- SQL 内で条件分岐を行う
  • UNION --- 複数の SELECT 結果を結合する

まとめ

  • SQL は RDB を操作するための言語であり、SIer の開発者にとって最も重要なスキルの一つである
  • SELECT / INSERT / UPDATE / DELETE の 4 つの基本操作が DML の中核
  • WHERE 句による条件指定と JOIN によるテーブル結合は日常的に使用する
  • GROUP BY による集計処理も業務システムでは頻繁に登場する
  • 障害調査・テストデータ確認・パフォーマンスレビューなど、開発のあらゆる場面で SQL が必要になる