PostgreSQL 練習 (準備1)

前回、PostgreSQL について調べてみました。
そして、Docker を使って PostgreSQL サーバを構築し、
psqlコマンドで操作できるようになりました。

utouto97.hatenablog.com

今回からは、この PostgreSQL を使って、Qiita で見つけた SQL の練習問題に取り組んでいきたいと思います。

SQL 練習問題

Qiita で見つけた SQL の練習問題というのは ↓ になります。

qiita.com

この記事の中では

DB Fiddleを使うとブラウザ上で簡単にSQLを実行できます。

のように書かれていますが、今回は自分で建てた PostgreSQL サーバーを使って取り組みたいと思います。

前回の記事で建てた PostgreSQL の Docker コンテナで進めていきます。

データベース作成

まずは、この練習問題用のデータベースを作成します。

PostgreSQL では、createdbコマンドを利用して、データベースを作成することができます。
Docker を使っているので docker execでコマンドを実行していきます。
今回、データベースの名前はqiita_sql_questionsとしました。

docker exec postgres createdb qiita_sql_questions -U postgres

これで、データベースが作成できました。
確認してみます。
PostgreSQL では、\lでデータベース一覧を表示することができます。
一覧の中に先ほど作成したqiita_sql_questionsがあると思います。

テーブル・データの準備

練習問題の記事の Schema SQL を参考に、データベースにテーブルを作成し、データを挿入していきます。

CREATE TABLE students (
  id integer NOT NULL PRIMARY KEY,
  name varchar(255) NOT NULL,
  gender varchar(1) NOT NULL
);


INSERT INTO students
VALUES
  (1, '長岡 一馬', ''),
  (2, '中本 知佳', ''),
  (3, '松本 義文', ''),
  (4, '佐竹 友香', '');

CREATE TABLE exam_results (
  student_id integer NOT NULL,
  subject varchar(255) NOT NULL,
  score bigint NOT NULL,
  PRIMARY KEY(student_id, subject)
);

INSERT INTO exam_results
VALUES
  (1, '国語', 30),
  (1, '英語', 30),
  (2, '国語', 70),
  (2, '数学', 80),
  (3, '理科', 92),
  (4, '社会', 90),
  (4, '理科', 35),
  (4, '英語', 22);

これで、テーブルが二つ (students と exam_results)が作成されました。
確認してみます。PostgreSQL では、\dでテーブル一覧を取得することができます。
結果は以下のようになると思います。

            List of relations
 Schema |     Name     | Type  |  Owner   
--------+--------------+-------+----------
 public | exam_results | table | postgres
 public | students     | table | postgres
(2 rows)

また、それぞれのテーブルにはデータを挿入したので、それも確認してみます。

まず、students テーブルから確認します。

SELECT * FROM students;

結果はこんな感じです。

 id |   name    | gender 
----+-----------+--------
  1 | 長岡 一馬 | 男
  2 | 中本 知佳 | 女
  3 | 松本 義文 | 男
  4 | 佐竹 友香 | 女
(4 rows)

続いて、exam_results テーブル。

SELECT * FROM exam_results;
 student_id | subject | score 
------------+---------+-------
          1 | 国語    |    30
          1 | 英語    |    30
          2 | 国語    |    70
          2 | 数学    |    80
          3 | 理科    |    92
          4 | 社会    |    90
          4 | 理科    |    35
          4 | 英語    |    22
(8 rows)

これで準備が整ったので、次回から問題を解いていきます。

utouto97.hatenablog.com

参考

qiita.com

終わり