データベース基礎とSQL入門学んで基礎固め
個人的理解を深めるために、データベースの基本からSQLの基礎までを紹介します。
データベースの基礎
データベースとは
データベース(DB)は、情報を効率的に管理・検索・更新するためのシステムです。
データベースは、データの保存とアクセスを効率化します。
リレーショナルデータベースの概念
リレーショナルデータベースは、データをテーブル形式で管理し、テーブル間の関係を定義します。
以下は基本的な用語です。
| 用語 | 説明 |
|---|---|
| テーブル | データを行と列で整理する構造。(例: 顧客テーブル、注文テーブル) |
| 行(レコード) | テーブル内の1つのデータエントリ。(例: 1人の顧客の情報) |
| 列(フィールド) | テーブル内のデータの属性。(例: 顧客名、住所) |
| 主キー(PK) | 各行を一意に識別するための列。(例: 顧客ID) |
| 外部キー(FK) | 他のテーブルの主キーを参照する列。テーブル間の関係を構築 |
SQLの基礎
SQLとは
SQL(Structured Query Language)は、データベースの操作や管理を行うための言語です。
SQLを使用すると、データの検索、挿入、更新、削除が簡単に行えます。
基本的なSQLクエリ
以下は、SQLの基本的なクエリの例です。
| クエリタイプ | 説明 |
|---|---|
| SELECT | データを検索する。 |
| INSERT | 新しいデータを追加する。 |
| UPDATE | 既存のデータを更新する。 |
| DELETE | データを削除する。 |
それぞれのSQLクエリを使用した場合のテーブルの変化を、具体的な例をもとに説明します。
1. SELECT
データを検索するためのクエリです。
基本形:
SELECT カラム名1, カラム名2, ...
FROM テーブル名
WHERE カラム = 'データ名';
以下の例では、employees テーブルから name と department のデータを、Sales 部署に所属する従業員のみを対象に取得します。
クエリ:
SELECT name, department
FROM employees
WHERE department = 'Sales';
実行前のテーブル (employees):
| id | name | department | salary |
|---|---|---|---|
| 1 | Alice | Sales | 5000 |
| 2 | Bob | HR | 4000 |
| 3 | Carol | Sales | 5500 |
| 4 | Dave | IT | 6000 |
実行結果:
| name | department |
|---|---|
| Alice | Sales |
| Carol | Sales |
2. INSERT
新しいデータをテーブルに追加します。
基本形:
INSERT INTO テーブル名 (カラム名1, カラム名2, ...)
VALUES (値1, 値2, ...);
以下の例では、employees テーブルに name, department, salary に対応する値 Eve, Marketing, 4500 を挿入します。
クエリ:
INSERT INTO employees (name, department, salary)
VALUES ('Eve', 'Marketing', 4500);
実行前のテーブル (employees):
| id | name | department | salary |
|---|---|---|---|
| 1 | Alice | Sales | 5000 |
| 2 | Bob | HR | 4000 |
| 3 | Carol | Sales | 5500 |
| 4 | Dave | IT | 6000 |
実行後のテーブル (employees):
| id | name | department | salary |
|---|---|---|---|
| 1 | Alice | Sales | 5000 |
| 2 | Bob | HR | 4000 |
| 3 | Carol | Sales | 5500 |
| 4 | Dave | IT | 6000 |
| 5 | Eve | Marketing | 4500 |
3. UPDATE
既存のデータを更新します。
基本形:
UPDATE テーブル名
SET カラム名1 = 新しい値1, カラム名2 = 新しい値2, ...
WHERE 条件;
以下の例では、employees テーブルの salary を 5200 に更新します。
ただし、条件に一致する行 (name が Alice である行) にのみ適用されます。
クエリ:
UPDATE employees
SET salary = 5200
WHERE name = 'Alice';
実行前のテーブル (employees):
| id | name | department | salary |
|---|---|---|---|
| 1 | Alice | Sales | 5000 |
| 2 | Bob | HR | 4000 |
| 3 | Carol | Sales | 5500 |
| 4 | Dave | IT | 6000 |
| 5 | Eve | Marketing | 4500 |
実行後のテーブル (employees):
| id | name | department | salary |
|---|---|---|---|
| 1 | Alice | Sales | 5200 |
| 2 | Bob | HR | 4000 |
| 3 | Carol | Sales | 5500 |
| 4 | Dave | IT | 6000 |
| 5 | Eve | Marketing | 4500 |
4. DELETE
テーブルからデータを削除します。
決定:
DELETE FROM テーブル名
WHERE 条件;
以下の例では、employees テーブルから条件に一致する行 (name が Dave である行) を削除します。
クエリ:
DELETE FROM employees
WHERE name = 'Dave';
実行前のテーブル (employees):
| id | name | department | salary |
|---|---|---|---|
| 1 | Alice | Sales | 5200 |
| 2 | Bob | HR | 4000 |
| 3 | Carol | Sales | 5500 |
| 4 | Dave | IT | 6000 |
| 5 | Eve | Marketing | 4500 |
その他SQLクエリ
基本的なSQLクエリ以外に、WHERE, ORDER BY, GROUP BY についても説明します。
| クエリタイプ | 説明 |
|---|---|
| WHERE | 特定の条件に基づいてデータをフィルタリングする。 |
| ORDER BY | 検索結果を特定の順序で並べ替える。 |
| GROUP BY | データをグループ化し、集計関数を適用する。 |
以下のテーブルを元に考えていきます。
実行後のテーブル (employees):
| id | name | department | salary |
|---|---|---|---|
| 1 | Alice | Sales | 5200 |
| 2 | Bob | HR | 4000 |
| 3 | Carol | Sales | 5500 |
| 5 | Eve | Marketing | 4500 |
1. 条件指定(WHERE句)
WHERE句を使用して、特定の条件に基づいてデータを検索します。
以下の例では、employees テーブルから id が 2 の従業員データを取得します。
クエリ:
SELECT * FROM employees
WHERE id = 2;
実行結果:
| id | name | department | salary |
|---|---|---|---|
| 2 | Bob | HR | 4000 |
2. ソート(ORDER BY句)
ORDER BY句を使用して、結果を特定の順序で並べ替えます。
以下の例では、employees テーブルから従業員のデータを salary で昇順に並べ替えます。
クエリ:
SELECT * FROM employees
ORDER BY salary ASC;
実行結果:
| id | name | department | salary |
|---|---|---|---|
| 2 | Bob | HR | 4000 |
| 5 | Eve | Marketing | 4500 |
| 1 | Alice | Sales | 5200 |
| 3 | Carol | Sales | 5500 |
3. グルーピング(GROUP BY句)
GROUP BY句を使用して、データをグループ化し、集計関数を適用します。
以下の例では、employees テーブルの各部門 (department) ごとに平均給与 (AVG(salary)) を計算します。
クエリ:
SELECT department, AVG(salary)
FROM employees
GROUP BY department;
実行結果:
| department | AVG(salary) |
|---|---|
| Sales | 5350 |
| HR | 4000 |
| Marketing | 4500 |
Discussion