このリポジトリは、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 コマンドが使用できる
インストール確認
$ psql --version(PostgreSQLが入っていない場合)
$ brew install postgresql起動確認
$ pg_isready(起動してない場合)
$ brew services start postgresqlDB作成
$ createdb sql_practicepsql起動
$ 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 userspsql の中で INSERT ファイルを実行
sql_practice=# \i basic/01_insert_users.sqlデータの確認
sql_practice=# SELECT * FROM users;(データがおかしくなった場合はリセット)
TRUNCATE TABLE users RESTART IDENTITY;学習用に段階的に進めているため、最新版の DB 状態(テーブル構造+データ)を seed として書き出すには下記を実行します:
$ pg_dump sql_practice > setup/snapshot/seed.sql- seed.sql を実行すれば、一発でテーブル作成とデータ投入が再現できます
- 学習用に追加した CRUD データも含まれます
Create: INSERT 基本
sql_practice=# \i basic/01_insert_users.sqlRead: SELECT 基本
sql_practice=# \i basic/02_select_users.sqlUpdate: UPDATE 基本
sql_practice=# \i basic/03_update_users.sqlDelte: DELETE 基本
sql_practice=# \i basic/04_delete.sqlテーブルの定義変更を反映
sql_practice=# \i setup/migrations/02_add_columns_to_users.sqlInsert実行
sql_practice=# \i basic/01_insert_users.sqlUpdate実行
sql_practice=# \i basic/03_update_users.sqlmigration(DDL)
sql_practice=# \i setup/migrations/03_create_posts.sqlbasic(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;→エラー
行を増やす
sql_practice=# \i basic/06_join_basic.sql