PostgreSQL の学習用環境です。Docker Compose で起動すると、サンプルデータが投入された状態で利用できます。
docker exec -it postgres-sandbox psql -U postgres -d sandbox
| 項目 |
値 |
| ホスト |
localhost |
| ポート |
5432 |
| ユーザー |
postgres |
| パスワード |
postgres |
| データベース |
sandbox |
departments (部署)
└── employees (従業員)
categories (カテゴリ)
└── products (商品)
└── order_items (注文明細)
│
customers (顧客) │
└── orders (注文) ┘
| テーブル名 |
説明 |
件数 |
| departments |
部署 |
5 |
| employees |
従業員 |
10 |
| customers |
顧客 |
8 |
| categories |
商品カテゴリ |
5 |
| products |
商品 |
16 |
| orders |
注文 |
10 |
| order_items |
注文明細 |
19 |
-- 全従業員を取得
SELECT * FROM employees;
-- 部署ごとの従業員数
SELECT d.department_name, COUNT(e.employee_id) as employee_count
FROM departments d
LEFT JOIN employees e ON d.department_id = e.department_id
GROUP BY d.department_id, d.department_name;
-- 従業員と所属部署
SELECT e.first_name, e.last_name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id;
-- 注文詳細(顧客名、商品名を含む)
SELECT
o.order_id,
c.customer_name,
p.product_name,
oi.quantity,
oi.unit_price
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
JOIN order_items oi ON o.order_id = oi.order_id
JOIN products p ON oi.product_id = p.product_id;
-- カテゴリ別の商品数と平均価格
SELECT
c.category_name,
COUNT(p.product_id) as product_count,
AVG(p.price) as avg_price
FROM categories c
LEFT JOIN products p ON c.category_id = p.category_id
GROUP BY c.category_id, c.category_name;
-- 顧客別の注文総額
SELECT
c.customer_name,
COUNT(o.order_id) as order_count,
SUM(o.total_amount) as total_spent
FROM customers c
LEFT JOIN orders o ON c.customer_id = o.customer_id
GROUP BY c.customer_id, c.customer_name
ORDER BY total_spent DESC;
-- 平均給与より高い給与の従業員
SELECT first_name, last_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
-- 注文したことがある顧客
SELECT * FROM customers
WHERE customer_id IN (SELECT DISTINCT customer_id FROM orders);