【PostgreSQL】 基本的なCRUD操作

#PostgreSQLとは

>フリーなオープンソースのリレーショナルデータベース管理システム

簡単にいうとこれに尽きるかと思います。
じゃあ、他のRDBMS（Relational DataBase Management System ）との違いは何？と思ってらっしゃる方も多いのでしょうが、またその記事は後日書き記したいと思います。

ひとまず今回は、
**「データベースを管理するシステムのことかー」**
と思ってくださればOKです。:ok_hand:

#CRUDとは

**CRUD = Create（生成）、Read（読み取り）、Update（更新）、Delete（削除）**
の操作をまとめてCRUDと呼んでいます。

webアプリケーションでいうと
**Create（登録機能）、Read（参照機能）、Update（変更機能）、Delete（削除機能）**
となります。

#【PostgreSQL】基本的なCRUDとは

これで、タイトルの「【PostgreSQL】基本的なCRUD操作」の意味がわかったのではないでしょうか。

**「データーベースに対する、基本的な登録、参照、変更、削除　の操作」**
です。


#基本的なCRUD操作
それでは、基本的なCRUD操作についてご紹介していきたいと思います。
CRUD操作に使用するテーブルはこちらです。
テーブル名はstudentsでid, name, age の列名があります。

|  id  | name |  age |
|:-----|-----:|:----:|
|      |      |      |
これはCREATE TABLEをして作成しました。今回のCRUD操作とは別ですが、一応記しておきます。

基本構文はこちら:point_down:
**CREATE TABLE テーブル名 (列名 データ型 制約 [, 列名 データ型 制約 …] );**

例はこちら:point_down:

```sql:テーブルの作成
CREATE TABLE students(id CHAR(4) NOT NULL, name TEXT NOT NULL, age INTEGER, PRIMARY KEY (id));
```

まず、CREATE TABLEでテーブル名 = students を指定します。その後、列名 = idと、そのデータ型 = CHAR(4) と制約 = NOT NULLを指定しています。最後に主キーの指定をしています。

---
###Create（生成）

まずは、INSERTです。テーブルに対して、値の追加をすることができます。

基本構文はこちら:point_down:
**INSERT INTO テーブル名 (列名,列名...) VALUES (値,値...)**

例はこちら:point_down:

```sql:値の追加
INSERT INTO students (id, name, age) VALUES ('0001', '川端奈緒', 11);
```

まず、`INSERT INTO` でテーブル名 = `students` を指定します。その後、　列名 = `id`, `name`, `age`を指定しています。 `VALUES`では列に入れる値を指定しています。今回の場合は `id ='0001'`, `name = '川端奈緒'`, `age = 11` という値を入れています。

この結果

|  id  | name |  age |
|:-----|-----:|:----:|
|      |      |      |

上記のテーブルが、下記のようになります。


|  id  |   name  |   age  |
|:-----|--------:|:------:|
| 0001 | 川端奈緒 |   11   |

でも、毎回これをするのはめんどくさいですよね。

```sql:値の追加
INSERT INTO students (id, name, age) VALUES ('0001', '川端奈緒', 11);
```

そういう時は

```sql:値の追加
INSERT INTO students (id, name, age) VALUES ('0001', '川端奈緒', 11), ('0002', '安田梨沙', 21);
```

みたいな感じで`VALUES`を`,`で繋げると、連続で値を入れてくれます。

---
###Read（読み取り）

続いてSELECTです。指定した値など様々なデータベースの情報を取得することができます。

基本構文はこちら:point_down:
**SELECT 列名 FROM テーブル名**

例はこちら:point_down:

``````sql:データの取得
SELECT * FROM students
```

まず、取得したい列名に`*`を入れているので、全ての列を取得します。どこから列名を取得するのかというと、`FROM` の後に指定した `students`テーブルからです。

この結果はこちら。

|  id  |   name  |   age  |
|:-----|--------:|:------:|
| 0001 | 川端奈緒 |   11   |
全て取得しているので全て表示されます。

では、こちらはどうでしょう。

``````sql:指定したデータの取得
SELECT id FROM students
```
取得する列名のみ`id`に変更しました。

その結果はこちら

|  id  |   
|:-----|
| 0001 |
`id`を指定したので、`id`のみを取得することができました。

---
###Update（更新）

次はUPDATEです。既存の列に入っている値を更新することができます。

基本構文はこちら:point_down:
**UPDATE テーブル名 SET 列名 = 値**

例はこちら:point_down:

```sql:更新
UPDATE students SET name = '多田典子'
```

`UPDATE`の後に更新対象のテーブル名 = `students` を指定します。その後の`SET`で　更新する`列名 = name`と更新する`値 = '多田典子'`を入れます。

この結果はこちら。

|  id  |   name  |   age  |
|:-----|--------:|:------:|
| 0001 | 多田典子 |   11   |
`name`の列が多田典子に更新されています。
ただし、この場合は`name`の列が全て多田典子になってしまうので、１つの行を特定して更新したい場合は 

**UPDATE テーブル名 SET 列名 = 値 WHERE 削除する行を特定する条件**

という風に`WHERE`を追加します。

例はこちら:point_down:

```sql:指定したデータの更新
UPDATE students SET name = '多田典子' WHERE id = '0001'
```
例えばこのようなテーブルがあったとします。


|  id  |   name  |   age  |
|:-----|--------:|:------:|
| 0001 | 川端奈緒 |   11   |
| 0002 | 山田智 |   12    |
これに対して先ほどののSQLを流せば、

|  id  |   name  |   age  |
|:-----|--------:|:------:|
| 0001 | 多田典子 |   11   |
| 0002 | 山田智 |   12    |
という風に`WHERE`以降で指定した条件の `id = '0001'`に合致する行のみが更新対象となっています。

---
###Delete（削除）
最後はDELETEです。値の削除をすることができます。

基本構文はこちら:point_down:
**DELETE FROM テーブル名 WHERE 削除する行を特定する条件**

例はこちら:point_down:

```sql:指定したデータの削除
DELETE FROM students WHERE id = '0001'
```

`DELETE FROM`の後に`テーブル名 = students`を指定します。その後、`WHERE`で 削除したい行を特定するために `id = '0001'`を指定しました。

|  id  |   name  |   age  |
|:-----|--------:|:------:|
| |  |  |
指定した`id`の列が削除されています。`WHERE`を使用しなかった場合はテーブルすべての行が削除されてしまうので注意してください。

---
#まとめ
今回は、CRUD操作の基礎を書きました。

|  CRUD |                            基本構文                  |
|:------|:-----------------------------------------------------:|
|  INSERT  | INSERT INTO テーブル名 (列名,列名...) VALUES (値,値...) |
|  SELECT |                　SELECT 列名 FROM テーブル名          |
| UPDATE |                       テーブル名 SET 列名 = 値       |
| DELETE |    DELETE FROM テーブル名 WHERE 削除する行を特定する条件  |

                 
これはPostgreSQLの基礎中の基礎なので、今後はさらに詳しい記事を作成していきたいと思います。