SQL: SQL入門

大きな図書館に入って、特定の本を借りたいと想像してください。司書に話しかける必要があります — 本のタイトル、著者名、分類番号を伝えれば、司書が見つけてくれます。SQL(Structured Query Language)は、あなたとデータベースの「司書」の間の共通言語です。データベースに何百万ものレコードが格納されていても、SQLを知っていれば、必要な情報を正確に検索、追加、変更、削除できます。

1. 基本概念

(1) SQLとは?

SQLはリレーショナルデータベースとの通信のために特別に設計された標準言語です。1970年代にIBMの研究者によって提案されて以来、世界で最も広く使用されているデータベースクエリ言語となっています。

(2) なぜSQLを学ぶのか?

(3) リレーショナルデータベースの基本概念

リレーショナルデータベースはテーブルを使ってデータを整理します。Excelのスプレッドシートと同じように、直感的で分かりやすいです:

概念 説明 例え
テーブル 格納されたデータの集合 Excelのワークシート
特定のデータレコード Excelの行
データの属性/フィールド Excelの列
主キー 各行を一意に識別する列 身分証明書番号

例えば、employeesテーブル:

id name department salary
1 John Smith Engineering 15000
2 Jane Doe Marketing 12000

(4) SQLとNoSQLの比較

比較項目 SQL(リレーショナル) NoSQL(非リレーショナル)
データ構造 テーブル(行と列) ドキュメント、キーバリューペア、グラフなど
スキーマ 固定スキーマ フレキシブル/スキーマレス
トランザクションサポート 強整合性(ACID) 最終整合性
スケーリング方法 垂直スケーリング 水平スケーリング
代表的な用途 銀行、EC注文 ログ、ソーシャルデータ
代表製品 MySQL、PostgreSQL MongoDB、Redis
💡 ヒント: ほとんどのビジネスシナリオ(EC、金融、管理システムなど)はSQLデータベースで十分に対応できます。データ構造が極めて柔軟な場合や、大規模な水平スケーリングが必要な場合のみNoSQLを検討してください。

(5) 主要データベースの比較

データベース 特徴 最適な用途
MySQL オープンソース、成熟したエコシステム、優れたパフォーマンス Webアプリケーション、中小規模プロジェクト
PostgreSQL 最も機能が豊富、JSON対応、高い拡張性 複雑なクエリ、地理データ、大規模プロジェクト
SQLite 軽量、サーバー不要、単一ファイルで保存 モバイル、組み込み、ローカルテスト
SQL Server Microsoft製品、.NETとの連携が良好 エンタープライズアプリケーション、Windowsエコシステム

2. 基本構文/使い方

(1) SQL構文の基本

SQLステートメントはセミコロン;で終わります。キーワードは大文字小文字を区別しません(ただし可読性のため大文字を推奨)。

SQL
SELECT name, salary FROM employees WHERE salary > 10000;

このステートメントの意味:employeesテーブルから、給与が10000を超える従業員のnamesalaryを検索します。

(2) SQLコマンドのカテゴリ

SQLコマンドは機能によって4つの主要カテゴリに分類されます:

カテゴリ 正式名称 目的 主なコマンド
DDL データ定義言語 データベース構造の定義 CREATEALTERDROP
DML データ操作言語 データ操作(CRUD) SELECTINSERTUPDATEDELETE
DCL データ制御言語 権限制御 GRANTREVOKE
TCL トランザクション制御言語 トランザクション管理 COMMITROLLBACK
💡 ヒント: 初心者が最もよく使うのはDDLとDMLです。DDLは「テーブル作成」に、DMLは「データ操作」に使用されます。このチュートリアルもこの2つの部分に焦点を当てています。

💡 ヒント: SQLステートメント内のキーワード(SELECTFROMWHEREなど)は予約語であり、テーブル名や列名として使用できません。

(3) サンプル:全データの検索(難易度⭐)

最も基本的なクエリ — テーブルからすべてのデータを取得します:

SQL
-- すべての従業員情報を検索
SELECT * FROM employees;
▶ 試してみよう

出力例:

TEXT 📖 参照専用
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でデータを挿入します:

SQL
-- 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;
▶ 試してみよう

出力:

TEXT 📖 参照専用
id  name   age  grade
1   Alice  18   Senior
2   Bob    17   Junior

3. 主な応用シナリオ

(1) シナリオ1:ECデータ管理

ECプラットフォームは商品、ユーザー、注文などのデータを管理する必要があります。SQLで簡単に処理できます:

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:従業員管理システム

企業の人事システムは従業員情報、部署、給与などを管理する必要があります:

SQL
-- 部署別の平均給与を検索
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';

▶ サンプル

SQL
SELECT * FROM users;
▶ 試してみよう

❓ よくある質問

Q SQLは難しいですか?
A いいえ。SQLの構文は英語に近く、コアコマンドはわずかです(SELECT、INSERT、UPDATE、DELETE)。基本をマスターするには数日で十分です。
Q SQLを学ぶ前にデータベースをインストールする必要がありますか?
A SQLiteから始めることを推奨します — サーバーのインストールは不要で、単一ファイルで動作します。このチュートリアルのレッスン02で環境構築方法を説明します。
Q SQLとMySQLの違いは何ですか?
A SQLは言語標準であり、MySQLはSQL言語を使用する特定のデータベース製品です。「英語」と「アメリカ人」の関係に似ています。
Q SQLスキルがあればどんな仕事に就けますか?
A バックエンド開発者、データアナリスト、データエンジニア、BIエンジニア、DBA(データベース管理者)など、多くの職種でSQLが活用されます。

📖 まとめ

📝 練習問題

演習1(⭐):主キーとは何か、なぜすべてのテーブルに必要なのかを自分の言葉で説明してください。

演習2(⭐⭐):タイトル、著者、価格、出版日を含む「books」テーブルを設計する必要があります。CREATE TABLEステートメントを書いてください。

演習3(⭐⭐⭐):SQLとNoSQLを比較し、それぞれの利点と欠点を3つずつ挙げ、どちらのデータベースがどのシナリオに適しているか説明してください。


4. 統一サンプルデータベース

以下のデータは残りの27レッスンで使用されます。今すぐ慣れましょう。レッスン02で環境を構築した後、コピーして実行できます:

SQL
-- 部署テーブル
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)
);
💡 ヒント: この4つのテーブルは小さな「企業データベース」を構成し、部署、従業員、商品、注文をカバーしています。後続のレッスンのすべての例はこれらのテーブルに基づいています。


5. 次のレッスン

👉 02 - 環境構築:データベースツールをインストールし、学習環境を構成して、最初のSQLステートメントを実行しましょう!

Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%