Skip to content

shinoburc/postgresql-sandbox

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

PostgreSQL Sandbox

PostgreSQL の学習用環境です。Docker Compose で起動すると、サンプルデータが投入された状態で利用できます。

必要条件

  • Docker
  • Docker Compose

使い方

起動

docker-compose up -d

psql で接続

docker exec -it postgres-sandbox psql -U postgres -d sandbox

外部ツールからの接続情報

項目
ホスト localhost
ポート 5432
ユーザー postgres
パスワード postgres
データベース sandbox

停止

docker-compose down

データを含めて完全削除

docker-compose down -v

テーブル構成

departments (部署)
    └── employees (従業員)

categories (カテゴリ)
    └── products (商品)
            └── order_items (注文明細)
                    │
customers (顧客)    │
    └── orders (注文) ┘

テーブル一覧

テーブル名 説明 件数
departments 部署 5
employees 従業員 10
customers 顧客 8
categories 商品カテゴリ 5
products 商品 16
orders 注文 10
order_items 注文明細 19

サンプルクエリ

基本的な SELECT

-- 全従業員を取得
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;

JOIN を使ったクエリ

-- 従業員と所属部署
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);

About

PostgreSQL sandbox

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors