🛠️ SQL学習用のデータベース構築方法

Uncategorized

SQLの練習には、実際にコマンドを実行できる環境が必要です。初心者におすすめの、手軽に構築できる方法をいくつか紹介します。

1. SQLite(手軽さNo.1)

SQLiteは、サーバーとして動作させる必要がなく、ファイル一つでデータベースを構築・管理できる軽量なデータベースです。

特徴詳細
環境構築非常に簡単。専用のCLIツールやGUIツールをダウンロードするだけ。
練習方法ほとんどのSQL文法(SELECT, INSERT, JOINなど)が実行可能。
メリットインストール不要で、ほとんどのプログラミング言語(Python, JavaScriptなど)から利用可能。

【手順の概略】

  1. SQLiteのCLI(コマンドラインインターフェース)またはDB Browser for SQLite(GUIツール)をダウンロードします。
  2. データベースファイル(例: test_db.db)を作成します。
  3. 後述の**CREATE TABLE**文を実行して、練習用のテーブルを作成します。

2. オンライン実行環境(最も手軽)

ソフトウェアのインストールすら不要な、Web上のSQL実行環境(Sandbox)を利用する方法です。

  • 例: SQL Fiddle, W3Schools SQL Tryit Editor など
  • メリット: すぐにSQLを書き始められる。
  • デメリット: 大量のデータや複雑な操作の練習には不向き。

3. テーブルを作成する基本文法: CREATE TABLE

SQL学習の最初のステップとして、練習用のテーブルを構築します。これは**DDL(データ定義言語)**に分類されます。

SQL

CREATE TABLE テーブル名 (
    カラム名1 データ型 [制約],
    カラム名2 データ型 [制約],
    ...
);

💡 練習用データベースの例

顧客情報(Customers)と注文情報(Orders)という2つのテーブルを作成し、後でJOINの練習に使えるように関連付けます。

  1. 顧客テーブル (Customers) の作成
    SQL
    CREATE TABLE Customers (
    customer_id INTEGER PRIMARY KEY, -- 主キー(レコードを一意に特定)
    name TEXT NOT NULL, -- 氏名(NULLを許可しない)
    email TEXT UNIQUE, -- メールアドレス(一意であること)
    city TEXT
    );
  2. 注文テーブル (Orders) の作成
    SQL
    CREATE TABLE Orders (
    order_id INTEGER PRIMARY KEY,
    customer_id INTEGER,
    order_date DATE,
    amount INTEGER,
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id) -- 外部キー
    );
    • FOREIGN KEY: この制約により、Ordersテーブルのcustomer_idは、必ずCustomersテーブルに存在するcustomer_idを参照しなければならない、というテーブル間の関連性が定義されます。これがJOINの土台となります。

🤝 複雑な結合をマスター:JOIN(テーブル結合)

リレーショナルデータベースでは、データは冗長性を避けるために複数のテーブルに分けて保存されます。この分かれたデータを一時的に結合し、1つの結果セットとして取り出すためにJOIN句を使用します。

1. JOINの基本的な種類

JOINの種類役割図のイメージ
INNER JOIN (内部結合)両方のテーブルに一致するデータ(共通部分)がある行だけを結合して取得します。最も一般的に使われます。
LEFT JOIN (左外部結合)FROM句で指定した左側のテーブルの全データを取得し、右側のテーブルで一致するものがあれば結合します。一致するデータがなければ、右側の列はNULLになります。
RIGHT JOIN (右外部結合)右側のテーブルの全データを取得し、左側のテーブルで一致するものがあれば結合します。
FULL JOIN (完全外部結合)両方のテーブルの全データを取得します。一致する行は結合され、一致しない行は、相手側のテーブルの列がNULLになります。

2. 結合の構文

JOINFROM句の後に記述し、どのカラムを基準に結合するかを**ON句**で指定します。

SQL

SELECT
    C.name,
    O.order_date,
    O.amount
FROM
    Customers AS C -- テーブルに別名(エイリアス) C をつける
INNER JOIN
    Orders AS O    -- テーブルに別名(エイリアス) O をつける
ON
    C.customer_id = O.customer_id; -- 結合の基準となるカラム

3. 実践的なJOINの例

例1: INNER JOIN(注文のある顧客のみ)

顧客情報と注文情報を結合し、実際に注文した顧客とその注文日・金額を取得します。

SQL

-- 実際に注文した顧客の情報と注文詳細を取得
SELECT 
    C.name, 
    O.order_date, 
    O.amount
FROM 
    Customers AS C
INNER JOIN 
    Orders AS O
ON 
    C.customer_id = O.customer_id;

例2: LEFT JOIN(全ての顧客と注文情報)

全ての顧客の情報を取得し、注文情報があれば結合します。注文のない顧客の行では、O.order_dateO.amountは**NULL**になります。

SQL

-- 全ての顧客の情報(注文の有無に関わらず)を取得
SELECT 
    C.name, 
    O.order_date
FROM 
    Customers AS C
LEFT JOIN 
    Orders AS O
ON 
    C.customer_id = O.customer_id;

例3: LEFT JOINとWHERE句(注文のない顧客を見つける)

LEFT JOINの結果を利用して、注文情報が**NULL**である行をWHERE句で絞り込めば、一度も注文したことがない顧客を抽出できます。

SQL

-- 注文履歴がない顧客の名前を見つける
SELECT 
    C.name
FROM 
    Customers AS C
LEFT JOIN 
    Orders AS O
ON 
    C.customer_id = O.customer_id
WHERE
    O.order_id IS NULL; -- 注文IDがNULL(つまり注文がない)の行を抽出

JOINを理解することは、複雑なデータ分析やレポート作成の基礎となります。まずはINNER JOINLEFT JOINを、先ほど作成した練習用テーブルで試してみましょう。

コメント