ホーム第7章: データベース
第7章 3節

SQLの基本

データベースの構造と設計方法が分かりました。では、プログラムから実際に「顧客情報を取得して」「新規注文を追加して」と命令を下すにはどうすればよいのでしょうか。ここで使われるのが、世界標準のデータベース操作言語SQLです。SQLの「宣言型」という強力な思想と、テーブルを連結する「JOIN」の仕組みを学びます。

1. 宣言型言語としてのSQLの思想

PythonやC言語などのプログラミング言語は、基本的には「手続き型(How:どのように処理するか)」の言語です。「配列をループで回して、もし条件に合えば変数に格納して…」といった手順を順に書きます。

一方、SQLは「宣言型(What:何が欲しいか)」の言語です。 「どのようなルートで、どのアルゴリズムで検索するか(How)」はすべてDBMSが裏で自動判断します。プログラマは、単に「このテーブルから、この条件に合うデータを抽出して(What)」とだけ記述すればよいのです。

このおかげで、わずか数行のSQL文を書くだけで、数百万件の中から目的のデータを高速に引き出すことができます。

2. データの操作:4大基本コマンド(CRUD)

SQLの基本は、データの作成(Create)、読み出し(Read)、更新(Update)、削除(Delete)の頭文字を取ったCRUD操作に対応する4つのコマンドです。

基本コマンド例
  • SELECT(検索・読み出し):
    SELECT name, email FROM customers WHERE status = 'active';
    (「customers」テーブルから、「status」が「active」のレコードの「name」と「email」を抜き出せ)
  • INSERT(新規追加):
    INSERT INTO customers (id, name) VALUES (101, '山田太郎');
  • UPDATE(更新):
    UPDATE customers SET email = 'taro@example.com' WHERE id = 101;
  • DELETE(削除):
    DELETE FROM customers WHERE id = 101;

3. RDBの核心:JOIN(テーブル結合)

前節で学んだ「正規化」によって、データは「注文テーブル」と「顧客テーブル」にバラバラに分割されました。 しかし、伝票を印刷するときなどは、「誰(顧客名)が、いつ、何を注文したか」が合体した1つの表が欲しくなります。

この、分割されたテーブル同士を、共通するキー(外部キーと主キー)を基に合体させる操作をJOIN(結合)と呼びます。

注文テーブル 注文ID: #9001 顧客ID: 101 顧客テーブル 顧客ID: 101 氏名: 山田 JOIN 結合結果テーブル 注文ID: #9001 顧客ID: 101 氏名: 山田
図 7-3:共通の顧客IDをキーとしたテーブル結合(JOIN)のイメージ

SQLでは、以下のように JOIN 句を記述します。

SELECT orders.id, customers.name 
FROM orders 
JOIN customers ON orders.customer_id = customers.id;

この命令を送ると、DBMSは「注文テーブルのcustomer_id」と「顧客テーブルのid」が一致するデータを自動で紐付け、両方のテーブルのデータを組み合わせた新しい仮想的な表(ビュー)を瞬時に作り出します。

この「正規化で細かく分ける(安全)」と「SQLのJOINで自由にくっつける(利便性)」の両立こそが、関係データベースが今日まで長く使われ続けている最大の秘訣です。

次のセクションでは、複数のSQL操作を実行する際にデータの整合性を守り抜く仕組み「トランザクション」と「ACID特性」について学びます。