SQL: 環境構築と最初のクエリ

1. 🎯 身近な例え

料理を学びたいと想像してください。料理を始める前に、以下が必要です:

  1. 台所の準備 — データベースのインストールはコンベクションオーブンの設置のようなものです
  2. 道具の準備 — コマンドラインとGUIツールはへらや計量カップのようなものです
  3. 材料の準備 — データベースの作成はカウンターに食材を並べるようなものです
  4. 料理開始 — 最初のSQLクエリは最初の包丁を入れるようなものです

台所なしでは料理できません。同様に、データベース環境を構築しなければSQLを学べません。このレッスンでは、ゼロからあなた自身の「SQL台所」を構築するまでガイドします。



2. 📚 基本概念

(1) データベースのインストール

3つの主流リレーショナルデータベースがあります。初心者はまず1つをインストールし、後から拡張しましょう。

MySQL

MySQLは世界で最も人気のあるオープンソースデータベースで、Web開発に広く使用されています。

Windowsへのインストール:

  1. MySQL公式サイトからインストーラーをダウンロード
  2. インストーラーを実行し、「Developer Default」を選択
  3. rootパスワードを設定(必ず覚えておいてください!)
  4. インストール後、MySQLサービスが自動的に起動します

macOSへのインストール:

BASH
# Homebrewでインストール
brew install mysql

# MySQLサービスを起動
brew services start mysql

# セキュアインストール
mysql_secure_installation

Linux(Ubuntu)へのインストール:

BASH
sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql
sudo mysql_secure_installation

PostgreSQL

PostgreSQLは最も強力なオープンソースデータベースで、複雑なクエリやエンタープライズアプリケーションに適しています。

Windowsへのインストール:

  1. PostgreSQL公式サイトからインストーラーをダウンロード
  2. インストーラーを実行し、パスワードとポート(デフォルト5432)を設定
  3. 「pgAdmin」コンポーネント(GUI管理ツール)にチェックを入れる

macOSへのインストール:

BASH
brew install postgresql@16
brew services start postgresql@16

Linux(Ubuntu)へのインストール:

BASH
sudo apt update
sudo apt install postgresql postgresql-contrib
sudo systemctl start postgresql

SQLite

SQLiteは軽量な組み込みデータベースで、サーバーのインストールが不要なため、学習や小規模プロジェクトに最適です。

Windowsへのインストール:

  1. SQLiteダウンロードページからsqlite-tools-win64をダウンロード
  2. 任意のディレクトリに解凍し、そのディレクトリをシステムPATHに追加

macOS / Linuxへのインストール:

BASH
# macOS(通常プリインストール済み)
brew install sqlite

# Linux
sudo apt install sqlite3

インストール確認:

BASH
sqlite3 --version
💡 ヒント: 初心者はSQLiteから始めることを推奨します — ゼロ設定、ゼロ障壁、コマンド1つでSQL学習を開始できます。


(2) コマンドラインでデータベースに接続する

コマンドラインはデータベースと対話する最も直接的な方法です。

MySQLに接続:

BASH
mysql -u root -p
# パスワードを入力してMySQLの対話型インターフェースにアクセス

入力後、プロンプトがmysql>に変わり、SQLステートメントを入力できるようになります。

PostgreSQLに接続:

BASH
# psqlクライアントを使用
psql -U postgres

# データベースを指定
psql -U postgres -d mydb

入力後、プロンプトがmydb=#に変わります。

SQLiteに接続:

BASH
# データベースファイルを作成または開く
sqlite3 mydb.db

# ファイルが存在しない場合は自動的に作成されます

入力後、プロンプトがsqlite>に変わります。

データベースコマンドラインの終了:

データベース 終了コマンド
MySQL exit; または quit;
PostgreSQL \q
SQLite .exit または Ctrl+D
💡 ヒント: コマンドライン操作は「原始的に」感じるかもしれませんが、サーバーメンテナンスや自動化スクリプトでは非常によく使用されます。必ずマスターしましょう。


(3) GUIツール

ビジュアルインターフェースを好む場合は、以下のツールを推奨します:

ツール 対応データベース 特徴 価格
DBeaver MySQL / PostgreSQL / SQLite / ほぼすべてのデータベース 機能が豊富、プラグインが充実 無料(コミュニティ版)
Navicat MySQL / PostgreSQL / SQLite 美しいインターフェース、スムーズな操作 有料
DB Browser for SQLite SQLite SQLite専用、軽量 無料
pgAdmin PostgreSQL 公式製品 無料
MySQL Workbench MySQL 公式製品 無料

DBeaverインストール例(推奨):

  1. DBeaver公式サイトからコミュニティ版をダウンロード
  2. インストール後、起動して「New Database Connection」をクリック
  3. データベースタイプを選択(例:MySQL)
  4. ホスト、ポート、ユーザー名、パスワードを入力
  5. 「Test Connection」をクリック — 成功すれば使用準備完了です
💡 ヒント: 初心者はコマンドラインとGUIツールの両方をマスターすることを推奨します — コマンドラインで基礎力を鍛え、GUIで日常的な効率を向上させましょう。


(4) オンラインSQL練習プラットフォーム

現時点ではソフトウェアをインストールしたくない場合は、オンラインプラットフォームで直接練習できます:

プラットフォーム URL 特徴
SQL Fiddle http://sqlfiddle.com MySQL / PostgreSQL / SQLite対応
DB Fiddle https://www.db-fiddle.com モダンなインターフェース、複数バージョン対応
SQLiteOnline https://sqliteonline.com ゼロ設定、すぐに利用可能
LeetCode SQL https://leetcode.cn/problemset/database 問題で練習、実践的に学習
💡 ヒント: オンラインプラットフォームはアイデアを素早く検証するのに最適ですが、長期的な学習にはローカルにデータベースをインストールすることを推奨します。



3. 📝 基本構文と使い方

(1) 最初のSQLステートメント:SELECT

SELECTはSQLで最もよく使われるステートメントで、データベースからデータを取得するために使用します。最もシンプルな形式は:

SQL
SELECT 式;

最もシンプルなクエリから始めましょう:

SQL
SELECT 1;

このステートメントの意味:1を計算して返します。テーブルは関係ありません — データベースが正常に動作していることを確認するためのものです。

データベース別の構文:

SQL
-- MySQL / PostgreSQL / SQLiteで動作
SELECT 1;

-- 文字列を返す
SELECT 'Hello, SQL!';

-- 計算結果を返す
SELECT 2 + 3;
💡 ヒント: すべてのSQLステートメントはセミコロン;で終わります。一部のツールでは省略可能ですが、常に記述する習慣をつけましょう。


(2) データベース情報の確認

データベースに接続した後、現在の環境を確認したくなるでしょう:

MySQL:

SQL
-- すべてのデータベースを表示
SHOW DATABASES;

-- 現在のデータベースを表示
SELECT DATABASE();

-- バージョンを表示
SELECT VERSION();

PostgreSQL:

SQL
-- すべてのデータベースを表示
\l

-- 現在のデータベースを表示
SELECT current_database();

-- バージョンを表示
SELECT version();

SQLite:

SQL
-- すべてのテーブルを表示
.tables

-- データベース情報を表示
.database

-- バージョンを表示
SELECT sqlite_version();
💡 ヒント: SHOW\lなどのコマンドは各データベース固有の「メタコマンド」であり、標準SQLの一部ではありません。データベース間で移行する際にはこれらの違いに注意してください。


(3) 最初のデータベースとテーブルの作成

正式にSELECTを学ぶ前に、クエリ対象のデータが必要です。データベースとテーブルの作成手順を示します:

MySQLの例:

SQL
-- データベースを作成
CREATE DATABASE learn_sql;

-- データベースを切り替え
USE learn_sql;

-- テーブルを作成
CREATE TABLE students (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    age INT,
    city VARCHAR(50)
);

-- サンプルデータを挿入
INSERT INTO students (name, age, city) VALUES
('John', 20, 'New York'),
('Jane', 22, 'Los Angeles'),
('Bob', 21, 'Chicago'),
('Alice', 23, 'Houston'),
('Charlie', 20, 'New York');

PostgreSQLの例:

SQL
CREATE DATABASE learn_sql;

-- 切断してlearn_sqlに再接続
\c learn_sql

CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age INT,
    city VARCHAR(50)
);

INSERT INTO students (name, age, city) VALUES
('John', 20, 'New York'),
('Jane', 22, 'Los Angeles'),
('Bob', 21, 'Chicago'),
('Alice', 23, 'Houston'),
('Charlie', 20, 'New York');

SQLiteの例:

SQL
-- SQLiteはデータベース作成が不要。直接テーブルを作成
CREATE TABLE students (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    age INTEGER,
    city TEXT
);

INSERT INTO students (name, age, city) VALUES
('John', 20, 'New York'),
('Jane', 22, 'Los Angeles'),
('Bob', 21, 'Chicago'),
('Alice', 23, 'Houston'),
('Charlie', 20, 'New York');
💡 ヒント: CREATE TABLEINSERT INTOは後のレッスンで詳しく説明します。今はそのまま進めてください。


(4) 最初のSELECTクエリの実行

データが準備できました。クエリを実行してみましょう:

SQL
-- すべての生徒の情報を検索
SELECT * FROM students;

出力:

TEXT 📖 参照専用
+----+---------+------+-----------+
| id | name    | age  | city      |
+----+---------+------+-----------+
|  1 | John    |   20 | New York  |
|  2 | Jane    |   22 | Los Angeles|
|  3 | Bob     |   21 | Chicago   |
|  4 | Alice   |   23 | Houston   |
|  5 | Charlie |   20 | New York  |
+----+---------+------+-----------+

特定の列のみクエリ:

SQL
-- nameとcityのみ検索
SELECT name, city FROM students;

出力:

TEXT 📖 参照専用
+---------+-----------+
| name    | city      |
+---------+-----------+
| John    | New York  |
| Jane    | Los Angeles|
| Bob     | Chicago   |
| Alice   | Houston   |
| Charlie | New York  |
+---------+-----------+


4. 🧪 例

(1) サンプル:SELECTでデータベース接続を確認する

データベースをインストールした後、最初に行うことは接続が正常であることを確認することです。

SQL
-- データベースが正常に応答することを確認
SELECT 'Database connected!' AS message;

-- 現在の時刻とユーザーを表示
SELECT NOW() AS current_time, CURRENT_USER AS db_user;
▶ 試してみよう

SQLiteの構文は少し異なります:

SQL
SELECT 'Database connected!' AS message;

SELECT datetime('now') AS current_time;

出力例:

TEXT 📖 参照専用
+---------------------+
| message             |
+---------------------+
| Database connected! |
+---------------------+

このシンプルなテストで接続問題を迅速にトラブルシューティングできます — このステートメントが実行されれば、環境は正しく設定されています。


(2) サンプル:テーブル作成、データ挿入、クエリ

小さな書籍ライブラリを管理したいとします。

SQL
-- booksテーブルを作成
CREATE TABLE books (
    id INT PRIMARY KEY,
    title VARCHAR(100) NOT NULL,
    author VARCHAR(50),
    price DECIMAL(8, 2),
    publish_year INT
);

-- サンプルデータを挿入
INSERT INTO books (id, title, author, price, publish_year) VALUES
(1, 'Database Systems', 'Connolly', 45.00, 2014),
(2, 'SQL in 10 Minutes', 'Ben Forta', 39.00, 2020),
(3, 'High Performance MySQL', 'Baron Schwartz', 89.00, 2013),
(4, 'PostgreSQL in Action', 'Tan Feng', 69.00, 2018);

-- すべての書籍を検索
SELECT * FROM books;
▶ 試してみよう

出力:

TEXT 📖 参照専用
+----+-------------------------+-----------------+-------+---------------+
| id | title                   | author          | price | publish_year  |
+----+-------------------------+-----------------+-------+---------------+
|  1 | Database Systems        | Connolly        | 45.00 |          2014 |
|  2 | SQL in 10 Minutes       | Ben Forta       | 39.00 |          2020 |
|  3 | High Performance MySQL  | Baron Schwartz  | 89.00 |          2013 |
|  4 | PostgreSQL in Action    | Tan Feng        | 69.00 |          2018 |
+----+-------------------------+-----------------+-------+---------------+

タイトルと価格のみクエリ:

SQL
SELECT title, price FROM books;

*を使用する代わりに列名(title, price)を指定することで、出力をより明確にし、クエリをより効率的にできます。


(3) サンプル:計算とエイリアスを含むクエリ

SQLのSELECTはデータの検索だけでなく、計算も実行できます。

SQL
-- 各書籍の出版からの経過年数を計算(2026年基準)
SELECT
    title AS book_title,
    author AS book_author,
    price AS original_price,
    price * 0.8 AS discounted_price,
    2026 - publish_year AS years_since_publish
FROM books;
▶ 試してみよう

出力:

TEXT 📖 参照専用
+-------------------------+-------------+----------------+------------------+--------------------+
| book_title              | book_author | original_price | discounted_price | years_since_publish|
+-------------------------+-------------+----------------+------------------+--------------------+
| Database Systems        | Connolly    |          45.00 |            36.00 |                 12 |
| SQL in 10 Minutes       | Ben Forta   |          39.00 |            31.20 |                  6 |
| High Performance MySQL  | Baron S.    |          89.00 |            71.20 |                 13 |
| PostgreSQL in Action    | Tan Feng    |          69.00 |            55.20 |                  8 |
+-------------------------+-------------+----------------+------------------+--------------------+

ポイント:

💡 ヒント: ASキーワードはすべての主要データベースで動作し、SQLの最もよく使われる機能の1つです。



5. 🏢 シナリオ別応用

(1) シナリオ1:開発環境のセットアップ

あなたはバックエンド開発者で、新しいプロジェクトにMySQLデータベースが必要です。以下のタスクを完了してください:

  1. MySQLをインストールし、サービスを起動
  2. プロジェクトデータベースproject_dbを作成
  3. ユーザー情報を格納するusersテーブルを作成
  4. テストレコードを挿入して検証
SQL
-- ステップ1:データベースを作成
CREATE DATABASE project_db CHARACTER SET utf8mb4;

-- ステップ2:データベースを切り替え
USE project_db;

-- ステップ3:usersテーブルを作成
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- ステップ4:テストデータを挿入
INSERT INTO users (username, email) VALUES
('testuser', 'test@example.com');

-- ステップ5:検証
SELECT * FROM users;

(2) シナリオ2:データ分析の準備

あなたはデータアナリストで、CSVデータを素早く確認する必要があります。SQLiteにインポートしてクエリします。

BASH
# コマンドラインで操作
sqlite3 sales.db

# テーブルを作成
CREATE TABLE sales (
    id INTEGER PRIMARY KEY,
    product TEXT,
    quantity INTEGER,
    unit_price REAL,
    sale_date TEXT
);

# CSVデータをインポート(.importコマンドを使用)
.mode csv
.import sales_data.csv sales

# インポート結果を表示
SELECT * FROM sales LIMIT 5;

# 総レコード数を表示
SELECT COUNT(*) AS total_records FROM sales;
💡 ヒント: SQLiteの.importコマンドはCSVファイルをデータベーステーブルとして素早く読み込むのに非常に便利で、データ探索やアドホック分析に最適です。

▶ サンプル

SQL
CREATE DATABASE shop;
USE shop;
▶ 試してみよう

❓ よくある質問

Q MySQL、PostgreSQL、SQLiteのどれを選べばいいですか?
A
Q インストール中にrootパスワードを忘れましたどうすればいいですか?
A
Q コマンドラインでSQLステートメントを入力しても何も起きません。どうすればいいですか?
A
Q オンラインプラットフォームとローカルインストールの違いは何ですか?
A

📖 まとめ

このレッスンでは、SQL学習のための環境準備を完了しました:

  1. データベースのインストール — MySQL、PostgreSQL、SQLiteのインストール方法を学びました
  2. コマンドライン接続 — コマンドラインツールを使用したデータベースへの接続と操作をマスターしました
  3. GUIツール — DBeaver、Navicat、DB Browserなどのグラフィカルツールを探索しました
  4. オンラインプラットフォーム — SQL Fiddle、DB Fiddleなどのオンライン練習環境を発見しました
  5. 最初のクエリSELECTステートメントの基本、クエリ、計算、エイリアスを学びました

環境構築は面倒かもしれませんが、後続のすべての学習の基盤です。料理を学ぶにはまず台所に慣れるのと同じように、道具を知ることで「料理」本身に集中できます。


📝 練習問題

(1) 演習1:環境確認

インストールしたデータベースに接続し、以下のクエリを実行して、出力が正しいことを確認してください:

SQL
SELECT 'Hello SQL!' AS greeting, 1 + 1 AS result;

(2) 演習2:商品テーブルの作成とクエリ

以下のフィールドを持つproductsテーブルを作成し、少なくとも3件のレコードを挿入してから、すべてのレコードをクエリしてください:

フィールド 説明
id 整数 主キー
name テキスト 商品名
category テキスト カテゴリ
price 小数 価格
stock 整数 在庫数

(3) 演習3:計算を含むクエリ

演習2のproductsテーブルを使用して、各商品の在庫総額(価格×在庫数)を計算するクエリを書き、出力列に日本語のエイリアスを使用してください。

期待される出力例:

TEXT 📖 参照専用
+----------+------+--------+------------+
| 商品名 | 価格 | 在庫数 | 在庫総額 |
+----------+------+--------+------------+
| ...      | ...  | ...    | ...        |
+----------+------+--------+------------+

次のレッスン: レッスン3:基本クエリ — SELECTとFROM

Web-Tutorial.com

Web-Tutorial 技術チーム

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

100%