ウェブエンジニア問題集
第1章

SQLとリレーショナルデータベースの全体像

7
この章の目次開く

SQLを学び始めると、SELECTJOIN の構文に目が行きがちです。 しかし実務でSQLを書くときは、構文だけでなく「データがどのように整理されているか」を理解している必要があります。

この章では、SQLとリレーショナルデータベースの全体像を整理します。 細かい構文に入る前に、テーブル・行・列・キー・リレーションという土台を押さえましょう。

学習者学習者

SQLって、データを取ってくるためのコマンド集って理解でいいの?データベース設計とは別物?

SQLとは何か

SQLは、リレーショナルデータベースを操作するための言語です。 データの取得、追加、更新、削除、テーブル作成、権限管理などを行えます。

よく使う操作は次の4つです。

操作SQL何をするか
取得SELECTデータを検索して取り出す
追加INSERT新しい行を追加する
更新UPDATE既存の行を書き換える
削除DELETE既存の行を削除する

SQLは「データベースに対して何をしたいか」を宣言する言語です。 多くの場合、「どうやって探すか」の細かい手順はデータベース側が実行計画として決めます。

SELECT name, email
FROM users
WHERE is_active = true
ORDER BY created_at DESC;
sql

このSQLは「有効なユーザーの名前とメールアドレスを、新しい順に取り出したい」と宣言しています。 実際にどのインデックスを使うか、どの順番で読み込むかはDBMSが判断します。

先生先生

SQLは「何をしたいか」を書く言語で、「どうやるか」はDBMS任せ。構文だけでなく、データの構造を理解することが実務の近道だよ。

リレーショナルデータベースとは

リレーショナルデータベースは、データをテーブルとして管理します。 テーブルは行と列で構成され、Excelの表に近い見た目をしています。

ただし、Excelと違ってリレーショナルデータベースには次のような制約や仕組みがあります。

  • 列ごとにデータ型を決められる
  • 主キーで行を一意に識別できる
  • 外部キーで他のテーブルとの関係を表現できる
  • トランザクションでデータの整合性を守れる
  • インデックスで検索を高速化できる

リレーショナルデータベースの強みは、複数のテーブルを関係づけて扱えることです。 ユーザー、注文、商品を1つの巨大な表に詰め込むのではなく、意味ごとに分けて保存し、必要なときに JOIN でつなぎます。

テーブル・行・列

SQLを読むときは、まず次の3つを区別します。

用語意味
テーブル同じ種類のデータを集めたものusers, orders
1件分のデータ1人のユーザー、1件の注文
データの項目name, email, created_at
SELECT name, email
FROM users;
sql

このSQLでは、users がテーブル、nameemail が列です。 実行結果として返ってくる1件1件が行です。

主キーと外部キー

テーブル設計で最初に理解したいのが、主キーと外部キーです。

主キー(Primary Key) は、テーブル内の1行を一意に識別するための列です。 多くのテーブルでは id が主キーになります。

CREATE TABLE users (
  id BIGINT PRIMARY KEY,
  name VARCHAR(100) NOT NULL,
  email VARCHAR(255) NOT NULL
);
sql

外部キー(Foreign Key) は、別のテーブルの主キーを参照する列です。 たとえば注文テーブルの user_id は、どのユーザーの注文かを示します。

CREATE TABLE orders (
  id BIGINT PRIMARY KEY,
  user_id BIGINT NOT NULL,
  ordered_at TIMESTAMP NOT NULL,
  FOREIGN KEY (user_id) REFERENCES users(id)
);
sql
主キーはその行自身の識別子です。外部キーは参照先の主キー値を格納する列であり、その行自身を識別するためのものではありません。
学習者学習者

主キーと外部キーの違いがごっちゃになりがち…。外部キーって必ず必要なの?

先生先生

外部キー制約はなくても動くけど、付けないとゴミデータが入りやすい。「存在しないユーザーの注文」が入ったらバグの原因になるから、基本は付けよう。

データ構造を理解してからSQLを書くことで、無駄のない設計・クエリにつながります

DBMSの違い

SQLは標準化されていますが、実際にはDBMSごとに細かな違いがあります。 MySQL、PostgreSQL、SQLite、SQL Server、Oracle Databaseなどが代表例です。

DBMSよく使われる場面
MySQLWebサービス、WordPress、一般的な業務アプリ
PostgreSQL複雑なクエリ、分析、型や制約を重視するシステム
SQLiteローカル開発、モバイルアプリ、軽量な組み込み用途
SQL ServerMicrosoft系の業務システム

基本の SELECTWHEREJOINGROUP BY は多くのDBMSで共通です。 一方で、日付関数、JSON操作、文字列連結、LIMITの書き方、一部の型名などは差があります。

SQLを書くときの読み方

SQLは英語の文章に近い順番で読めます。

SELECT name, email
FROM users
WHERE is_active = true
ORDER BY created_at DESC
LIMIT 10;
sql

読む順番は次のようになります。

  1. FROM users — どのテーブルから
  2. WHERE is_active = true — どの行を対象にして
  3. SELECT name, email — どの列を取り出して
  4. ORDER BY created_at DESC — どの順で並べて
  5. LIMIT 10 — 何件まで返すか

見た目の書く順番と、データベースが論理的に処理する順番は少し違います。 この違いは、WHERESELECTGROUP BYHAVING を理解するときに重要になります。

ちゃんと使うためのポイント

  • SQLはリレーショナルデータベースを操作するための言語
  • テーブルは行と列で構成される
  • 主キーは行を一意に識別する
  • 外部キーはテーブル同士の関係を表す
  • MySQLやPostgreSQLなどDBMSごとに方言はあるが、基本概念は共通

次の章では、最も基本となる SELECT を使って、テーブルからデータを取り出す方法を学びます。

SQLクイズに挑戦するこの章で学んだSQLの知識を、4択クイズでアウトプットして定着させよう