SQL入門をやさしく図解 — SELECT・WHERE・JOIN・GROUP BY

公開: 2026年7月 カテゴリ: データベース

「SQLってどう読むの?」——SQLは、表形式のデータベースからほしいデータを取り出す言語です。難しそうに見えますが、基本は「どの列を・どの表から・どんな条件で」の3つ。この記事では、SELECTの基本から、絞り込み・並べ替え・テーブル結合(JOIN)・集計(GROUP BY)までを、具体的な表で図解します。表の分け方は データベースの正規化 もどうぞ。

SQLとは — 「何が欲しいか」を書く言語

SQLは、リレーショナルデータベース(行と列の表でデータを管理する仕組み)を操作する言語です。データの検索(SELECT)・追加(INSERT)・更新(UPDATE)・削除(DELETE)ができます。特徴は、「1行ずつこう処理して…」という手順ではなく、「こういう条件のデータが欲しい」と結果を宣言すれば、あとはデータベースが最適な方法で取り出してくれる点です。

例として、次の「商品テーブル」を使います。

商品番号商品名分類単価
P01りんご果物100
P02みかん果物80
P03にんじん野菜60
P04ぶどう果物300

SELECT・FROM・WHERE — 取り出しの基本形

SQLの基本は3点セットです。SELECT(どの列を)・FROM(どの表から)・WHERE(どんな条件で)

SELECT 商品名, 単価
FROM 商品テーブル
WHERE 分類 = '果物' AND 単価 <= 100;

これは「商品テーブルから、分類が果物かつ単価が100円以下の行の、商品名と単価を取り出す」という意味。結果は次のとおりです。

商品名単価
りんご100
みかん80

WHEREの条件には =<><=>=<>(等しくない)や、ANDORNOT論理演算と同じ)、あいまい検索の LIKE、範囲の BETWEEN、候補列挙の IN などが使えます。

ORDER BY — 並べ替え

結果を並べ替えるには ORDER BYASC で昇順(小さい順)、DESC で降順(大きい順)です。

SELECT 商品名, 単価 FROM 商品テーブル ORDER BY 単価 DESC;

単価の高い順(ぶどう300→りんご100→みかん80→にんじん60)に並びます。並べ替えの仕組みは ソートアルゴリズムの可視化 で見られます。

JOIN — 分けた表をつなぐ

正規化でテーブルを分けると(正規化の記事参照)、情報を1つにまとめるには結合(JOIN)が必要です。JOINは共通する列(キー)を手がかりに、表を横につなげます。「注文明細テーブル」と「商品テーブル」を商品番号でつなぐ例:

JOIN:共通する「商品番号」でつなぐ 注文明細テーブル 注文番号 | 商品番号 1001 | P01 1001 | P02 1002 | P04 商品テーブル 商品番号 | 商品名 P01 | りんご P02 | みかん P04 | ぶどう 商品番号で対応づけ → 注文番号・商品番号・商品名を1つの表にまとめて取り出せる
図1: 外部キー(商品番号)で2表を結合。分割した情報を必要なときに1つにまとめる

SELECT 注文明細.注文番号, 商品.商品名
FROM 注文明細 JOIN 商品 ON 注文明細.商品番号 = 商品.商品番号;

GROUP BY と集約関数 — 集計する

「分類ごとの商品数」「商品ごとの売上合計」のような集計は、GROUP BY(グループにまとめる)集約関数を組み合わせます。

関数意味
COUNT( )件数を数える
SUM( )合計を出す
AVG( )平均を出す
MAX( ) / MIN( )最大 / 最小

SELECT 分類, COUNT(*), AVG(単価)
FROM 商品テーブル
GROUP BY 分類;

「分類ごとに、商品の件数と平均単価を出す」という意味。果物(3件・平均160円)、野菜(1件・平均60円)のようにまとまります。集計した後のグループを絞り込むには HAVING を使います(例:HAVING COUNT(*) >= 2 で2件以上の分類だけ)。

WHERE と HAVING の違い(頻出)

WHEREHAVING
絞り込む対象集計の個々の行集計のグループ
使う場面「単価100円以上の行だけ」「合計が1万円以上のグループだけ」
集約関数使えない使える(COUNT等で条件)

基本情報技術者試験ではこう出る

「与えられたSELECT文の実行結果を選ぶ」「WHEREとHAVINGの違い」「JOINで結合した結果」「GROUP BYと集約関数(COUNT・SUM・AVG)」が定番です。実行順序(FROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BY)を意識すると、結果を正しく追えます。SQLは正規化で分けた表を扱う言語なので、データベースの正規化とセットで学ぶと理解が深まります。

よくある質問

Q. 内部結合と外部結合の違いは?
A. 内部結合(INNER JOIN)は、両方のテーブルに対応がある行だけを取り出します。外部結合(LEFT/RIGHT OUTER JOIN)は、片方に対応がなくても、一方のテーブルの行はすべて残します(対応がない部分はNULL)。「注文のない商品も一覧に出したい」ときは外部結合を使います。

Q. NULLとは?
A. 「値が入っていない(未設定)」ことを表す特別な状態で、0や空文字とは別物です。NULLとの比較は = NULL ではなく IS NULL / IS NOT NULL を使う点に注意します。集計でも、COUNT(列)はNULLを数えないなどの扱いの違いがあります。

Q. SQLのDDL・DML・DCLとは?
A. 命令の分類です。DDLは表の定義(CREATE・ALTER・DROP)、DMLはデータ操作(SELECT・INSERT・UPDATE・DELETE)、DCLは権限やトランザクション制御(GRANT・COMMIT・ROLLBACK)。試験ではこの分類もよく問われます。

まとめ

SQLの基本はSELECT(列)・FROM(表)・WHERE(条件)の3点セット。そこにORDER BY(並べ替え)・JOIN(表の結合)・GROUP BY+集約関数(集計)を足せば、たいていのデータ取り出しができます。WHERE=集計前の行、HAVING=集計後のグループの違いを押さえ、正規化とセットで理解しておきましょう。

関連ページ: データベースの正規化ソートアルゴリズム可視化論理演算と真理値表記事一覧