「データベース、SQLがよく分からない」と悩んでいませんか?
現役WEBエンジニアとして、データベースを日々使っています。
この記事では、データベースの基本を解説します。
目次
データベースの種類
RDBとNoSQL
| 種類 | 特徴 | 代表例 |
|---|---|---|
| RDB | テーブル形式、SQL | MySQL, PostgreSQL |
| NoSQL | 柔軟な構造 | MongoDB, Redis |
選び方
RDB向き:
- トランザクション重視
- 複雑なクエリ
- データの整合性が重要
NoSQL向き:
- 大量データ
- 柔軟なスキーマ
- 高速な読み書き
SQL基本
データ取得(SELECT)
-- 全件取得
SELECT * FROM users;
-- 特定カラム
SELECT name, email FROM users;
-- 条件付き
SELECT * FROM users WHERE age >= 20;
-- 並び替え
SELECT * FROM users ORDER BY created_at DESC;
-- 件数制限
SELECT * FROM users LIMIT 10;
データ挿入(INSERT)
-- 1件挿入
INSERT INTO users (name, email) VALUES ('田中', 'tanaka@example.com');
-- 複数挿入
INSERT INTO users (name, email) VALUES
('田中', 'tanaka@example.com'),
('鈴木', 'suzuki@example.com');
データ更新(UPDATE)
-- 条件付き更新
UPDATE users SET name = '山田' WHERE id = 1;
-- 複数カラム更新
UPDATE users SET name = '山田', email = 'yamada@example.com' WHERE id = 1;
データ削除(DELETE)
-- 条件付き削除
DELETE FROM users WHERE id = 1;
-- 全削除(注意)
DELETE FROM users;
テーブル結合
INNER JOIN
-- 両方に存在するデータのみ
SELECT users.name, posts.title
FROM users
INNER JOIN posts ON users.id = posts.user_id;
LEFT JOIN
-- 左テーブルは全て、右は一致のみ
SELECT users.name, posts.title
FROM users
LEFT JOIN posts ON users.id = posts.user_id;
集計関数
-- 件数
SELECT COUNT(*) FROM users;
-- 合計
SELECT SUM(price) FROM orders;
-- 平均
SELECT AVG(age) FROM users;
-- グループ化
SELECT status, COUNT(*) FROM orders GROUP BY status;
インデックス
インデックスとは
- 検索を高速化
- 追加するとINSERTは遅くなる
- 適切に設計が必要
-- インデックス作成
CREATE INDEX idx_users_email ON users(email);
-- 複合インデックス
CREATE INDEX idx_orders_user_status ON orders(user_id, status);
NoSQL(MongoDB)
基本操作
// 挿入
db.users.insertOne({ name: "田中", age: 30 });
// 取得
db.users.find({ age: { $gte: 20 } });
// 更新
db.users.updateOne(
{ name: "田中" },
{ $set: { age: 31 } }
);
// 削除
db.users.deleteOne({ name: "田中" });
まとめ
データベース入門のポイント:
- SQL基本を覚える
- JOINとインデックスを理解
- RDB vs NoSQLの使い分け
- 実際に使って学ぶ
