Skip to content

ryo-i/sql-practice

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 

Repository files navigation

PostgreSQLで学ぶSQL

このリポジトリは、SQLを理解するために PostgreSQL + psql を使って学習した記録を残すものです。

学習ステップ

  • PostgreSQL / psql のセットアップ
  • データベース作成・接続
  • テーブル作成(DDL)
  • INSERT(データ投入)
  • CRUD(単一テーブル)
  • テーブル定義の変更(ALTER TABLE)
  • 既存レコードの補完・修正(UPDATE)
  • 複数テーブル設計(外部キー)
  • 外部キー制約の挙動確認
  • JOIN(行を増やす)
  • JOIN + WHERE(絞り込み)
  • JOIN + COUNT(集計)
  • HAVING(集計結果の絞り込み)
  • GROUP BY 基本(集計軸の違いを比較)
  • 条件付き集計(CASE WHEN)
  • 複合集計(2軸以上・分布)
  • インデックス(何に・なぜ貼るか)
  • 実行計画(EXPLAIN / EXPLAIN ANALYZE)

前提

  • PostgreSQL がローカルにインストールされている
  • psql コマンドが使用できる

PostgreSQL の確認

インストール確認

$ psql --version

(PostgreSQLが入っていない場合)

$ brew install postgresql

起動確認

$ pg_isready

(起動してない場合)

$ brew services start postgresql

起動手順

DB作成

$ createdb sql_practice

psql起動

$ psql sql_practice

(psql終了)

sql_practice=# \q

構成

  • setup/: DB・テーブル定義
  • basic/: SQLの基礎

テーブル作成

テーブル作成

sql_practice=# \i setup/migrations/01_create_users.sql

テーブル一覧

sql_practice=# \dt

テーブル定義

sql_practice=# \d users

INSERT(データ投入)

psql の中で INSERT ファイルを実行

sql_practice=# \i basic/01_insert_users.sql

データの確認

sql_practice=# SELECT * FROM users;

(データがおかしくなった場合はリセット)

TRUNCATE TABLE users RESTART IDENTITY;

最新のseedデータをダンプする

学習用に段階的に進めているため、最新版の DB 状態(テーブル構造+データ)を seed として書き出すには下記を実行します:

$ pg_dump sql_practice > setup/snapshot/seed.sql
  • seed.sql を実行すれば、一発でテーブル作成とデータ投入が再現できます
  • 学習用に追加した CRUD データも含まれます

CRUD(単一テーブル)

Create: INSERT 基本

sql_practice=# \i basic/01_insert_users.sql

Read: SELECT 基本

sql_practice=# \i basic/02_select_users.sql

Update: UPDATE 基本

sql_practice=# \i basic/03_update_users.sql

Delte: DELETE 基本

sql_practice=# \i basic/04_delete.sql

テーブル定義の変更(ALTER TABLE)

テーブルの定義変更を反映

sql_practice=# \i setup/migrations/02_add_columns_to_users.sql

Insert実行

sql_practice=# \i basic/01_insert_users.sql

Update実行

sql_practice=# \i basic/03_update_users.sql

複数テーブル設計(外部キー)

migration(DDL)

sql_practice=# \i setup/migrations/03_create_posts.sql

basic(DML)

sql_practice=# \i basic/05_insert_posts.sql

外部キー制約の挙動確認

存在しない親を参照

sql_practice=# INSERT INTO posts (user_id, title, content)
VALUES (999, '存在しないユーザーの投稿', 'これは失敗するはず');

→エラー

親(users)を削除しようとする

sql_practice=# DELETE FROM users WHERE id = 1;

→エラー

JOIN

行を増やす

sql_practice=# \i basic/06_join_basic.sql

About

SQL習得

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors