📚 SQLの基本
SQLはStructured Query Language(構造化問合せ言語)の略で、データベースを操作するための標準言語です。
🔍 主な特徴
- データベースの作成・変更・削除
- データの検索・追加・更新・削除
- アクセス権限の設定
SQLは大文字と小文字を区別しないことが多いですが、データベース製品によって異なります。
🔤 基本構文
✏️ SELECT文の基本
SELECT カラム名 FROM テーブル名
WHERE 条件
ORDER BY カラム名 [ASC|DESC]
LIMIT 件数;
WHERE 条件
ORDER BY カラム名 [ASC|DESC]
LIMIT 件数;
✏️ 簡単な例
SELECT * FROM users
WHERE age >= 20
ORDER BY created_at DESC
LIMIT 10;
WHERE age >= 20
ORDER BY created_at DESC
LIMIT 10;
文の終わりにはセミコロン(;)をつけます。
🔢 データ型
データ型 | 説明 |
---|---|
INTEGER | 整数型 |
NUMERIC | 固定小数点数型 |
VARCHAR | 可変長文字列 |
TEXT | 長い文字列 |
DATE | 日付 |
BOOLEAN | 真偽値 |
データベース製品によって使用できるデータ型は異なります。
🔍 WHERE句と演算子
⚙️ 比較演算子
演算子 | 意味 |
---|---|
= | 等しい |
!=, <> | 等しくない |
> | より大きい |
< | より小さい |
>= | 以上 |
<= | 以下 |
⚙️ 論理演算子
WHERE 条件1 AND 条件2
WHERE 条件1 OR 条件2
WHERE NOT 条件
WHERE 条件1 OR 条件2
WHERE NOT 条件
⚙️ 特殊演算子
WHERE カラム名 LIKE 'パターン'
WHERE カラム名 IN (値1, 値2, ...)
WHERE カラム名 BETWEEN 値1 AND 値2
WHERE カラム名 IS [NOT] NULL
WHERE カラム名 IN (値1, 値2, ...)
WHERE カラム名 BETWEEN 値1 AND 値2
WHERE カラム名 IS [NOT] NULL
⚙️ CASE式
条件に応じて異なる値を返す条件分岐式です。
-- 単純CASE式
CASE カラム名
WHEN 値1 THEN 結果1
WHEN 値2 THEN 結果2
ELSE 結果3
END AS エイリアス
-- 検索CASE式
CASE
WHEN 条件1 THEN 結果1
WHEN 条件2 THEN 結果2
ELSE 結果3
END AS エイリアス
CASE カラム名
WHEN 値1 THEN 結果1
WHEN 値2 THEN 結果2
ELSE 結果3
END AS エイリアス
-- 検索CASE式
CASE
WHEN 条件1 THEN 結果1
WHEN 条件2 THEN 結果2
ELSE 結果3
END AS エイリアス
✏️ CASE式の使用例
SELECT name,
CASE
WHEN age < 20 THEN '未成年'
WHEN age < 65 THEN '成人'
ELSE '高齢者'
END AS age_group
FROM users;
CASE
WHEN age < 20 THEN '未成年'
WHEN age < 65 THEN '成人'
ELSE '高齢者'
END AS age_group
FROM users;
CASE式はSELECT句だけでなく、WHERE句やORDER BY句でも使用できます。
🔄 JOIN句
複数のテーブルを結合して一つの結果セットを得るための構文です。
🔵⚪
INNER JOIN
🔵⚪➡️
LEFT JOIN
⚪🔵⬅️
RIGHT JOIN
✏️ INNER JOIN
SELECT a.name, b.value
FROM table_a AS a
INNER JOIN table_b AS b
ON a.id = b.a_id;
FROM table_a AS a
INNER JOIN table_b AS b
ON a.id = b.a_id;
✏️ LEFT JOIN
SELECT a.name, b.value
FROM table_a AS a
LEFT JOIN table_b AS b
ON a.id = b.a_id;
FROM table_a AS a
LEFT JOIN table_b AS b
ON a.id = b.a_id;
🔗 集合演算子
複数のSELECT文の結果を結合する演算子です。
⚙️ UNION
2つのクエリ結果を結合し、重複を除去します。
SELECT name FROM employees
UNION
SELECT name FROM customers;
UNION
SELECT name FROM customers;
⚙️ UNION ALL
重複を除去せずにすべての行を結合します。
SELECT name FROM employees
UNION ALL
SELECT name FROM customers;
UNION ALL
SELECT name FROM customers;
⚙️ INTERSECT
両方のクエリ結果に存在する行のみを返します。
SELECT product_id FROM orders_2023
INTERSECT
SELECT product_id FROM orders_2024;
INTERSECT
SELECT product_id FROM orders_2024;
⚙️ EXCEPT(MINUS)
最初のクエリ結果から2番目のクエリ結果を除いた行を返します。
SELECT student_id FROM all_students
EXCEPT
SELECT student_id FROM graduated_students;
EXCEPT
SELECT student_id FROM graduated_students;
集合演算子を使用する際は、各SELECT文のカラム数とデータ型が一致している必要があります。
📊 集計関数
関数 | 説明 |
---|---|
COUNT() | 行数を数える |
SUM() | 合計を計算する |
AVG() | 平均値を計算する |
MAX() | 最大値を取得する |
MIN() | 最小値を取得する |
SELECT COUNT(*) FROM users;
SELECT AVG(price) FROM products;
SELECT MAX(score), MIN(score) FROM exams;
SELECT AVG(price) FROM products;
SELECT MAX(score), MIN(score) FROM exams;
📝 データ操作
➕ INSERT
INSERT INTO テーブル名 (カラム1, カラム2, ...)
VALUES (値1, 値2, ...);
VALUES (値1, 値2, ...);
🔄 UPDATE
UPDATE テーブル名
SET カラム1 = 値1, カラム2 = 値2, ...
WHERE 条件;
SET カラム1 = 値1, カラム2 = 値2, ...
WHERE 条件;
❌ DELETE
DELETE FROM テーブル名
WHERE 条件;
WHERE 条件;
WHERE句を省略するとすべての行が対象になります。注意しましょう!
🏗️ テーブル操作
🆕 CREATE TABLE
CREATE TABLE テーブル名 (
カラム名1 データ型 [制約],
カラム名2 データ型 [制約],
...
);
カラム名1 データ型 [制約],
カラム名2 データ型 [制約],
...
);
🔄 ALTER TABLE
-- カラム追加
ALTER TABLE テーブル名
ADD カラム名 データ型 [制約];
-- カラム変更
ALTER TABLE テーブル名
ALTER COLUMN カラム名 データ型 [制約];
-- カラム削除
ALTER TABLE テーブル名
DROP COLUMN カラム名;
ALTER TABLE テーブル名
ADD カラム名 データ型 [制約];
-- カラム変更
ALTER TABLE テーブル名
ALTER COLUMN カラム名 データ型 [制約];
-- カラム削除
ALTER TABLE テーブル名
DROP COLUMN カラム名;
❌ DROP TABLE
DROP TABLE テーブル名;
🔍 GROUP BY と HAVING
GROUP BYはデータをグループ化し、HAVINGはグループに対する条件を指定します。
SELECT category, COUNT(*) as count
FROM products
GROUP BY category
HAVING COUNT(*) > 5
ORDER BY count DESC;
FROM products
GROUP BY category
HAVING COUNT(*) > 5
ORDER BY count DESC;
GROUP BY データをグループ化
集計関数 各グループに対して計算
HAVING グループに対する条件
ORDER BY 結果の並べ替え
💡 便利なTIPS
- クエリはインデントと改行を使って読みやすく書きましょう
- 複雑なクエリはサブクエリを活用しましょう
- テーブルやカラムにはわかりやすい名前をつけましょう
- 重要なデータを操作する前にバックアップを取りましょう
- 本番環境ではトランザクションを適切に使いましょう
実行前にSELECTでの確認を習慣にしましょう。特にUPDATEやDELETEの前には重要です。