SQL: SQL入門
大きな図書館に入って、特定の本を借りたいと想像してください。司書に話しかける必要があります — 本のタイトル、著者名、分類番号を伝えれば、司書が見つけてくれます。SQL(Structured Query Language)は、あなたとデータベースの「司書」の間の共通言語です。データベースに何百万ものレコードが格納されていても、SQLを知っていれば、必要な情報を正確に検索、追加、変更、削除できます。
1. 基本概念
(1) SQLとは?
SQLはリレーショナルデータベースとの通信のために特別に設計された標準言語です。1970年代にIBMの研究者によって提案されて以来、世界で最も広く使用されているデータベースクエリ言語となっています。
(2) なぜSQLを学ぶのか?
- 高い市場需要:バックエンド開発、データ分析、データサイエンスなど、多くの職種でSQLスキルが求められます
- 高い汎用性:SQLを習得すれば、MySQL、PostgreSQL、SQLite、SQL Serverなど、さまざまなデータベースにシームレスに移行できます
- 明確な論理:SQLの構文は自然言語に近く、初心者にも分かりやすく、かつ非常に強力です
- 普遍性:SQLは50年以上にわたり普及し続けており、データ分野のコアスキルであり続けています
(3) リレーショナルデータベースの基本概念
リレーショナルデータベースはテーブルを使ってデータを整理します。Excelのスプレッドシートと同じように、直感的で分かりやすいです:
| 概念 | 説明 | 例え |
|---|---|---|
| テーブル | 格納されたデータの集合 | Excelのワークシート |
| 行 | 特定のデータレコード | Excelの行 |
| 列 | データの属性/フィールド | Excelの列 |
| 主キー | 各行を一意に識別する列 | 身分証明書番号 |
例えば、employeesテーブル:
| id | name | department | salary |
|---|---|---|---|
| 1 | John Smith | Engineering | 15000 |
| 2 | Jane Doe | Marketing | 12000 |
- 各行が1人の従業員を表します
id列は主キーで、各従業員が一意の識別子を持つことを保証しますname、department、salaryは従業員情報を記述する列です
(4) SQLとNoSQLの比較
| 比較項目 | SQL(リレーショナル) | NoSQL(非リレーショナル) |
|---|---|---|
| データ構造 | テーブル(行と列) | ドキュメント、キーバリューペア、グラフなど |
| スキーマ | 固定スキーマ | フレキシブル/スキーマレス |
| トランザクションサポート | 強整合性(ACID) | 最終整合性 |
| スケーリング方法 | 垂直スケーリング | 水平スケーリング |
| 代表的な用途 | 銀行、EC注文 | ログ、ソーシャルデータ |
| 代表製品 | MySQL、PostgreSQL | MongoDB、Redis |
(5) 主要データベースの比較
| データベース | 特徴 | 最適な用途 |
|---|---|---|
| MySQL | オープンソース、成熟したエコシステム、優れたパフォーマンス | Webアプリケーション、中小規模プロジェクト |
| PostgreSQL | 最も機能が豊富、JSON対応、高い拡張性 | 複雑なクエリ、地理データ、大規模プロジェクト |
| SQLite | 軽量、サーバー不要、単一ファイルで保存 | モバイル、組み込み、ローカルテスト |
| SQL Server | Microsoft製品、.NETとの連携が良好 | エンタープライズアプリケーション、Windowsエコシステム |
2. 基本構文/使い方
(1) SQL構文の基本
SQLステートメントはセミコロン;で終わります。キーワードは大文字小文字を区別しません(ただし可読性のため大文字を推奨)。
SELECT name, salary FROM employees WHERE salary > 10000;
このステートメントの意味:employeesテーブルから、給与が10000を超える従業員のnameとsalaryを検索します。
(2) SQLコマンドのカテゴリ
SQLコマンドは機能によって4つの主要カテゴリに分類されます:
| カテゴリ | 正式名称 | 目的 | 主なコマンド |
|---|---|---|---|
| DDL | データ定義言語 | データベース構造の定義 | CREATE、ALTER、DROP |
| DML | データ操作言語 | データ操作(CRUD) | SELECT、INSERT、UPDATE、DELETE |
| DCL | データ制御言語 | 権限制御 | GRANT、REVOKE |
| TCL | トランザクション制御言語 | トランザクション管理 | COMMIT、ROLLBACK |
SELECT、FROM、WHEREなど)は予約語であり、テーブル名や列名として使用できません。
(3) サンプル:全データの検索(難易度⭐)
最も基本的なクエリ — テーブルからすべてのデータを取得します:
-- すべての従業員情報を検索
SELECT * FROM employees;
出力例:
id name department_id salary hire_date
1 John 1 15000.00 2023-01-15
2 Jane 2 12000.00 2023-03-20
3 Bob 1 18000.00 2022-06-01
*は「すべての列」を意味します。本番環境では、不要なデータの返却を避けるため、列名を明示的にリストアップすることを推奨します。
(4) サンプル:テーブル作成とデータ挿入(難易度⭐)
DDLを使ってシンプルなテーブルを作成し、DMLでデータを挿入します:
-- studentsテーブルを作成
CREATE TABLE students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
grade TEXT
);
-- 2件のレコードを挿入
INSERT INTO students (name, age, grade) VALUES ('Alice', 18, 'Senior');
INSERT INTO students (name, age, grade) VALUES ('Bob', 17, 'Junior');
-- 確認のため検索
SELECT * FROM students;
出力:
id name age grade
1 Alice 18 Senior
2 Bob 17 Junior
3. 主な応用シナリオ
(1) シナリオ1:ECデータ管理
ECプラットフォームは商品、ユーザー、注文などのデータを管理する必要があります。SQLで簡単に処理できます:
-- 在庫が少ない商品を検索
SELECT name, stock FROM products WHERE stock < 10;
-- 今月の注文合計金額を計算
SELECT SUM(quantity * price) AS total_revenue
FROM orders
JOIN products ON orders.product_id = products.id
WHERE order_date >= '2026-06-01';
(2) シナリオ2:従業員管理システム
企業の人事システムは従業員情報、部署、給与などを管理する必要があります:
-- 部署別の平均給与を検索
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id;
-- 2023年に入社した従業員を検索
SELECT name, hire_date FROM employees
WHERE hire_date BETWEEN '2023-01-01' AND '2023-12-31';
▶ サンプル
SELECT * FROM users;
❓ よくある質問
📖 まとめ
- SQLはリレーショナルデータベースと通信するための標準言語で、50年以上の歴史があります
- リレーショナルデータベースはテーブル、行、列を使ってデータを整理します。主キーは各行を一意に識別します
- SQLコマンドはDDL(構造定義)、DML(データ操作)、DCL(権限制御)、TCL(トランザクション管理)に分類されます
- 主要データベースにはMySQL、PostgreSQL、SQLite、SQL Serverがあります。初心者にはSQLiteを推奨します
- SQLはほとんどのビジネスシナリオに適しています。NoSQLは特殊なニーズ(大規模スケーリング、柔軟な構造)向けです
📝 練習問題
演習1(⭐):主キーとは何か、なぜすべてのテーブルに必要なのかを自分の言葉で説明してください。
演習2(⭐⭐):タイトル、著者、価格、出版日を含む「books」テーブルを設計する必要があります。CREATE TABLEステートメントを書いてください。
演習3(⭐⭐⭐):SQLとNoSQLを比較し、それぞれの利点と欠点を3つずつ挙げ、どちらのデータベースがどのシナリオに適しているか説明してください。
4. 統一サンプルデータベース
以下のデータは残りの27レッスンで使用されます。今すぐ慣れましょう。レッスン02で環境を構築した後、コピーして実行できます:
-- 部署テーブル
CREATE TABLE departments (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
location TEXT
);
-- 従業員テーブル
CREATE TABLE employees (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
department_id INTEGER,
salary DECIMAL(10,2),
hire_date DATE,
FOREIGN KEY (department_id) REFERENCES departments(id)
);
-- 商品テーブル
CREATE TABLE products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
category TEXT,
price DECIMAL(10,2),
stock INTEGER DEFAULT 0
);
-- 注文テーブル
CREATE TABLE orders (
id INTEGER PRIMARY KEY AUTOINCREMENT,
customer_name TEXT NOT NULL,
product_id INTEGER,
quantity INTEGER,
order_date DATE,
FOREIGN KEY (product_id) REFERENCES products(id)
);
5. 次のレッスン
👉 02 - 環境構築:データベースツールをインストールし、学習環境を構成して、最初のSQLステートメントを実行しましょう!