SQLとは?図書館の司書に頼む感覚でわかるSELECT入門

SQLとは?図書館の司書に頼む感覚でわかるSELECT入門 IT・コンピュータ基礎
図書館の司書に条件を伝えて本を検索してもらうSQLのイメージ図

図書館に行って「SF小説で、2020年以降に出版された本を、著者名の50音順で全部出してください」と司書さんに頼んだとしよう。

司書さんはその条件で本棚を探して、条件に合う本を持ってきてくれる。

SQLはまさにこれだ。データベースという「本棚」に向かって、「この条件で、このデータを、この順番で出してください」と指示する言葉——それがSQL(Structured Query Language)だ。

プログラミング経験がなくても、SQLは「人間が読んでほぼ意味がわかる」書き方になっている。SELECT name FROM books WHERE genre = 'SF' は「本テーブルからジャンルがSFのものの名前を取ってきて」と読める。英語が少しわかれば、何となく意味が推測できる。


この記事でわかること

  • データベースの基本構造(テーブル・行・列)
  • SELECT・FROM・WHERE・ORDER BYの基本的な書き方
  • 複数のテーブルを結合するJOINの考え方
  • GROUP BYで集計する方法
  • 高校情報Ⅰ・ITパスポートでよく出る問題パターン

データベースの基本構造:本棚・棚・本の関係

📌 要点:データベースはテーブル(表)の集まり。テーブルは行(レコード)と列(カラム/フィールド)で構成される。Excelの表と同じイメージだが、データベースは大量のデータを高速に検索・更新できる仕組みになっている。

データベーステーブルの行・列・フィールドの構造図

データベースの構造を図書館に例えると:

図書館データベース
図書館全体データベース
「SF小説コーナー」など棚の区分テーブル(表)
1冊の本行(レコード)
タイトル・著者名などの情報項目列(カラム/フィールド)

例えば「本」テーブルはこんな構造だ。

booksテーブル:

idtitleauthorgenreyear
1銀河鉄道の夜宮沢賢治SF1934
2ノルウェイの森村上春樹小説1987
3三体劉慈欣SF2008
41984年ジョージ・オーウェルSF1949

この表から「SFだけを取り出す」「出版年が新しい順に並べる」「著者ごとに何冊あるか数える」——そういった操作をSQLで行う。


SELECT・FROM・WHERE:「何を」「どこから」「条件は」

📌 要点:SQLの最も基本的な形は「SELECT(何を) FROM(どのテーブルから) WHERE(どんな条件で)」の3点セット。英語の語順そのままで「○○テーブルから、条件が△△のもの、□□列を取ってきて」と読める。

全件取得:SELECT * FROM

SELECT * FROM books;

books テーブルの全列(*)・全行を取ってきて」——一番シンプルな形だ。図書館で「本棚の本を全部見せて」と頼むようなもの。

列を指定する:SELECT 列名

SELECT title, author FROM books;

books テーブルから title(タイトル)と author(著者)だけ取ってきて」。必要な列だけを指定する。

条件を絞る:WHERE

SELECT title, author FROM books WHERE genre = 'SF';

books テーブルから genreSF の行の titleauthor を取ってきて」。

WHERE句でよく使う条件の書き方:

やりたいこと書き方
等しい=WHERE genre = 'SF'
等しくない<> または !=WHERE genre <> 'SF'
以上・以下・より大きい・より小さい>= <= > <WHERE year >= 2000
複数条件(両方)ANDWHERE genre = 'SF' AND year >= 2000
複数条件(どちらか)ORWHERE genre = 'SF' OR genre = '小説'
含む(部分一致)LIKEWHERE title LIKE '%の夜%'
リストのどれかINWHERE genre IN ('SF', 'ミステリ')

LIKE% は「何でもいい文字列」を意味する。'%の夜%' は「〜の夜〜」という文字が含まれるものを全部マッチさせる。

並び替える:ORDER BY

SELECT title, year FROM books ORDER BY year DESC;

year の降順(DESC = 大きい順)で並べて」。昇順は ASC(小さい順)で、省略すると昇順になる。

-- 先ほどの条件と組み合わせる
SELECT title, author, year
FROM books
WHERE genre = 'SF'
ORDER BY year DESC;

図書館の司書に「SF本を出版年の新しい順で出して」と頼んだ状態だ。


2つのテーブルをつなぐ:JOINの仕組み

📌 要点:JOINは複数のテーブルを共通の列(主キー・外部キー)で結合して、1つの結果として取得する操作。「本テーブルと著者テーブルを著者IDでつないで、著者の詳細情報も一緒に取得する」といった使い方をする。

2つのテーブルをIDで結合するJOINの仕組みを示した図解

実際のデータベースでは、情報をテーブルに分けて管理する。たとえば「本の情報」と「著者の詳細情報」を分けるとこうなる。

booksテーブル(著者IDだけ持つ):

idtitleauthor_idgenre
1銀河鉄道の夜101SF
3三体102SF

authorsテーブル(著者の詳細):

idnamecountry
101宮沢賢治日本
102劉慈欣中国

この2つを結合して「本のタイトル・著者名・著者の国」を一度に取得するには:

SELECT books.title, authors.name, authors.country
FROM books
JOIN authors ON books.author_id = authors.id;

結果:

titlenamecountry
銀河鉄道の夜宮沢賢治日本
三体劉慈欣中国

JOIN ... ON 条件 は「この条件が一致する行同士をつなぐ」という指示だ。books.author_id = authors.id は「本テーブルの author_id と著者テーブルの id が一致する行でつなぐ」という意味だ。


GROUP BY:ジャンルごとに何冊あるか数える

📌 要点:GROUP BYは指定した列の値でまとめてグループを作り、集計関数(COUNT・SUM・AVGなど)で各グループの集計値を計算する。「ジャンル別の冊数」「年別の売上合計」など、分類してから集計したい場合に使う。

SELECT genre, COUNT(*) AS 冊数
FROM books
GROUP BY genre;

結果:

genre冊数
SF3
小説1

COUNT(*) は「行の数を数える」集計関数だ。AS 冊数 は「この列の名前を冊数と表示する」という意味だ(エイリアスと呼ぶ)。

よく使う集計関数:

関数意味使用例
COUNT(*)行の数を数える本の冊数
SUM(列名)合計を計算する売上の合計
AVG(列名)平均を計算する評価点の平均
MAX(列名)最大値を取得する最も高い価格
MIN(列名)最小値を取得する最も古い出版年

GROUP BYした後に条件をつけたいときは WHERE ではなく HAVING を使う。

-- 2冊以上あるジャンルだけ表示
SELECT genre, COUNT(*) AS 冊数
FROM books
GROUP BY genre
HAVING COUNT(*) >= 2;

SQLの基本構文をまとめると

📌 要点:SELECTから始まる基本クエリはFROM・WHERE・GROUP BY・HAVING・ORDER BYの順番で書く。この順番は固定されているため、順番を間違えるとエラーになる。書く順番と実行される順番が異なる点にも注意。

SELECT   列名(または * または集計関数)
FROM     テーブル名
JOIN     結合するテーブル名 ON 結合条件        -- 必要な場合
WHERE    絞り込み条件                          -- 必要な場合
GROUP BY グループ化する列名                    -- 必要な場合
HAVING   グループ化後の絞り込み条件            -- 必要な場合
ORDER BY 並び替えの列名 ASC/DESC              -- 必要な場合
LIMIT    取得する最大行数                      -- 必要な場合

書く順番と実行順番は違う:

SQLは「書いた順番」で実行されるわけではない。

実際の実行順: FROM → JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT

WHERE より SELECT が先に書かれているが、実行は WHERE が先だ。これを知っておくと「なぜこのエラーが出るか」が理解しやすくなる。


高校情報Ⅰ・ITパスポートでよく出る問題パターン

📌 要点:試験では「SQLの結果として何行・何列返るか」「WHEREの条件式が正しく書けるか」「JOINで結合した結果がどうなるか」「集計関数の使い方」が頻出。実際に手を動かして書くより、結果を読む問題が多い。

頻出パターン①:SELECTの結果を答える

SELECT title FROM books WHERE genre = 'SF' AND year >= 2000;

上記のクエリを books テーブルに対して実行したとき返ってくる結果は何か。

(booksテーブルから、SFでかつ2000年以降の本のタイトルだけが返ってくる)

頻出パターン②:集計結果を答える

SELECT COUNT(*) FROM books WHERE genre = 'SF';

books テーブルにSFが3行あれば「3」が返ってくる。

頻出パターン③:ORDER BYの並び順

SELECT title, year FROM books ORDER BY year ASC;

→ 出版年の昇順(古い順)に全本のタイトルと出版年が返ってくる。

頻出パターン④:LIKEの使い方

Q. 「タイトルに"鉄道"が含まれる本を検索するSQL」として正しいものは?

A. WHERE title LIKE '%鉄道%'

FAQ

Q
SQLはプログラミング言語ですか?
A

厳密には「クエリ言語(問い合わせ言語)」です。PythonやJavaのような汎用プログラミング言語とは異なり、データベースへの問い合わせ(検索・追加・更新・削除)に特化しています。ただし「SQLを書ける」はITの基礎スキルとして広く求められるため、プログラミングと並んで重要な技術です。

Q
SELECT以外にどんな命令がありますか?
A

SQLの主な命令はSELECT(検索)・INSERT(追加)・UPDATE(更新)・DELETE(削除)の4種類です。これをCRUD(Create/Read/Update/Delete)と呼びます。試験ではSELECTが最も多く出題されますが、INSERT・UPDATE・DELETEの基本的な書き方も覚えておくと安心です。

Q
MySQLとPostgreSQLとSQLiteは何が違いますか?
A

すべてSQLを使うデータベース管理システム(DBMS)です。SQLの基本構文はほぼ共通ですが、一部の関数名や高度な機能に差があります。MySQLはWebシステムで最もよく使われ、PostgreSQLは高機能・大規模向け、SQLiteはファイル1つで動くため組み込み・スマホアプリに使われます。

Q
JOINの種類(INNER JOIN・LEFT JOINなど)が複数あります。違いは何ですか?
A

INNER JOIN(内部結合)は両方のテーブルに一致する行だけ返します。LEFT JOIN(左外部結合)は左のテーブルの全行を返し、右のテーブルに一致する行がなければNULL(空欄)になります。試験ではINNER JOINが基本ですが、「片方にしか存在しないデータを含めたい」場合にLEFT JOINを使います。

Q
NULL(ヌル)とは何ですか?
A

NULLは「値が存在しない・不明・未設定」を表す特別な状態です。0でも空文字でもなく「そもそも値がない」という意味です。NULLの比較は = NULL ではなく IS NULL と書く必要があります。WHERE age = NULL はNULLを正しく検索できず、WHERE age IS NULL と書かなければなりません。

Q
データベースの「主キー」と「外部キー」とは何ですか?
A

主キー(Primary Key)はテーブルの各行を一意に識別するための列です。id 列がよく使われます。重複は許されません。外部キー(Foreign Key)は別のテーブルの主キーを参照する列です。books テーブルの author_idauthors テーブルの id(主キー)を参照する場合、author_id が外部キーです。JOINはこの関係を使って2つのテーブルをつなぎます。


まとめ

  • SQLはデータベースへの「問い合わせ言語」。図書館の司書に条件を伝えて本を出してもらう感覚
  • 基本構文は SELECT 列 FROM テーブル WHERE 条件 の3点セット
  • ORDER BY で並び替え、GROUP BY でグループ集計、JOIN で複数テーブルを結合する
  • COUNT・SUM・AVG・MAX・MIN の集計関数で「数える・合計・平均・最大・最小」ができる
  • 書く順番(SELECT→FROM→WHERE…)と実行順番(FROM→WHERE→SELECT…)は異なる

「SF小説で2020年以降のものを著者名順で全部出して」——これが日本語で言えるなら、SQLでも書ける。条件を一つずつ WHERE に、並び順を ORDER BY に書くだけだ。最初は難しく見えるが、英語の語順と意味を素直に読めば、すぐに「書ける言語」になる。


関連記事

データベースの設計思想(なぜテーブルを分けるか)を理解したい方はこちら。
Notionの破綻はコッドで防げる:関係データベースの思想

データベースの正規化(なぜ表を分割するか)を詳しく知りたい方はこちら。
完璧な表はなぜゴミになるのか?第5正規形まで解説
“`

タイトルとURLをコピーしました