導入
ここで、これから何度も出てくる言葉を整理しておきます。「データベース」「DBMS」「SQL」「RDB」――似ていて紛らわしいこれらの関係を、1枚の図でつかんでしまいましょう。用語がクリアになると、この先の学習が一気に楽になります。
説明
まず登場人物を並べます。
- データベース(DB)… データそのものの集まり(表の集合)。「倉庫の中身」。
- DBMS(DataBase Management System/データベース管理システム)… その倉庫を管理するソフトウェア。データの保存・検索・同時アクセス・バックアップなどを引き受ける「倉庫の管理人」。SQLite・MySQL・PostgreSQL・Oracle などがこれにあたります。
- SQL… 管理人(DBMS)に「こういうデータが欲しい」と頼むための共通言語。
アプリケーション(あなたが作るプログラム)は、DB を直接いじりません。必ず DBMS を通して、SQL で頼みます。
flowchart LR
A["アプリ・あなた"] -->|"SQL でお願い"| M["DBMS(管理人)<br/>例: SQLite / MySQL / PostgreSQL"]
M -->|"表を読み書き"| D[("データベース<br/>(表の集まり)")]
D -->|"結果の表"| M
M -->|"結果を返す"| A
そして DB にはいくつか種類があります。いま学んでいるのは、データを表(テーブル)で持ち、表どうしを関係づけるタイプで、これを RDB(リレーショナルデータベース/関係データベース) と呼びます。世の中の業務システムの多くはこの RDB で、SQL はその共通語です。
flowchart TB
DB["データベースの種類"] --> R["RDB(関係データベース)<br/>表と表の関係で持つ・SQLで操作<br/>SQLite / MySQL / PostgreSQL / Oracle"]
DB --> N["NoSQL(非RDB)<br/>表以外の形で持つ<br/>文書型(MongoDB) / KVS(Redis) など"]
R --> ME["このコースが扱うのは RDB。<br/>まず RDB と SQL を身につければ、実務の土台になる"]
このコースの実行環境は、その RDB のひとつ SQLite(軽量で、ブラウザの中でも動く DBMS)です。RDB は「自分がどんな表を持っているか」という設計情報まで、DB 自身の中に表として持っています。SQLite ではそれを sqlite_master という特別な表で覗けます。
SELECT name FROM sqlite_master WHERE type = 'table';
やってみよう
初期表示のクエリを実行してみましょう。このショップ DB に入っている5つのテーブル(users・categories・products・orders・order_items)の名前が並びます。「DB は自分の設計図まで抱えている」という感覚をつかんでください。
演習
categories(商品カテゴリ)テーブルの中身を全部表示して、どんなカテゴリがあるか見てみましょう。
ヒント1を見る
SELECT * FROM categories;