ホーム第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 = '[email protected]' WHERE id = 101;
  • DELETE(削除):
    DELETE FROM customers WHERE id = 101;

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

前節で学んだ「正規化」によって、データは「注文テーブル」と「顧客テーブル」に分割して保存されています。 しかし、システムでデータを表示する際には、顧客情報と注文情報が組み合わされた形式で取得する必要があります。

この、分割されたテーブル同士を、共通するキー(外部キーと主キー)を基に合体させる操作を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特性」について学びます。