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(検索・読み出し):
(「customers」テーブルから、「status」が「active」のレコードの「name」と「email」を抜き出せ)SELECT name, email FROM customers WHERE status = 'active'; - 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(結合)と呼びます。
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特性」について学びます。