PostgreSQLについての忘却録

##はじめに
今回はPostgreSQLについて学んだことのアウトプットとして書かせてもらいます。

主な内容としては
・データベースの作成
・テーブルの作成
・テーブルの削除
・検索
・列（レコード）の挿入、削除、更新
・トランザクション

について説明していきたいと思います。

##DBの作成

```
#CREATE DATEBASE データベース名;
```

ここのCREATE　DATEBASEは大文字になっていますが小文字でも適用されます。
SOLでは文の終わりとして;(セミコロン)を使用します。
つまり何かの処理を行う際、セミコロンがなければ処理は実行されないので注意が必要です。

##テーブルの作成

```
#CREATE TABLE テーブル名
(〈列名1〉〈データ型〉〈制約〉
〈列名2〉〈データ型〉〈制約〉
　　　　　　　・
　　　　　　　・
〈テーブルの制約1〉,〈テーブルの制約2〉,・・・・・);
```

作成例

```
# CREATE TABLE Resister
(name VARCHAR(50) NOT NULL,
name2 CHAR(10) ,
age INTEGER NOT NULL ,
age2 INTEGER ,
PRIMARY KEY (name));
CREATE TABLE
```
最後のCREATE TABLEはテーブルが作成できましたというのを示しています。

###列名,データ型,制約についての説明
####列名(カラム名)
ここにはデータを分類したい際の列名を入れます。
今回は登録用のテーブルとして名前を２種類、年齢を２種類入れました。

####データ型
**INTEGER型**：整数という意味を持っておりその名の通り整数が入ります。

**CHAR型**：固定長文字列という形式で文字列の格納が行われます。詳しく説明すると文字列が固定で入るので隙間ができてしまいます。隙間のでき方については挿入の部分で説明します。

**VARCHAR型**:可変長文字列という形式で文字列の格納が行われます。このデータ型を指定した場合、文字列に隙間ができない形となります。

**DATE型**：これは日付などのデータを指定する際に使用します。

####制約
ここでは列に挿入する際のデータには絶対に値を入れなければいけない、などの制約をせっていします。上で述べた例で言うとNOT NULL制約などがあります。これを制約として入れるとNULL（何も値が入っていない状態）にはできないとなるので、挿入の際に空だと処理が実行されなくなります。
その例については挿入の部分で書きます。


##検索

```
#SELECT 列名
FROM テーブル名;
```
実行例
先ほど作ったResisterテーブルを見てみます

```
#SELECT age 
FROM Resister;
--実行結果
 age
-----
(0 rows)
```

となります。
この(0 rows)は列が何も入っていないという状況を示しています。

この列の入れ方については挿入の部分で解説します

また

```
# SELECT *
FROM テーブル名;
```

を使用すると全ての列を出力することができます。

実行例

```
# SELECT *
FROM Resister;
 name | name2 | age | age2
------+-------+-----+------
(0 rows)
```

###ASを使用した別名の表示


###WHEREを使用した絞り込み

###演算

###ORDER BYを使用した並び替え




##行（レコード）の挿入、削除、更新
次にテーブル内の行（レコード）へのデータの登録、データの削除、データの更新について説明していきたいと思います。

###行の挿入

```
#INSERT INTO テーブル名　（列1,列2,....）
VALUES ('列1に対応した値','列2に対応した値'.....);
```

INSERT　INTO：挿入する
VALUES:値という意味を表しています

つまり挿入したいテーブル名の列にそれに対応した値を入れます
またVALUESの後に入れる値はデータ型によって''(シングルコーテーション)で囲むかどうかが決まります。文字型(CHARやVACHAR)や日付型（DATE）を指定した場合は''を使用し、INTEGERを指定した場合は''を使わないです。


実行例

```
#INSERT INTO Resister (name,name2,age,age2)
VALUES ('taro','hanako',20,30);

--実行後
INSERT 0 1
```

実際に実行されたか表示してみます

```
# SELECT *
FROM Resister;

 name |   name2    | age | age2
------+------------+-----+------
 taro | hanako     |  20 |   30
(1 row)
```

また上で実行したのは

```
# INSERT INTO Resister VALUES ('toro','',30,40);
INSERT 0 1
```
と言う形で表現することもできます。
結果は以下のようになります。

```
# SELECT *
FROM Resister;
 name |   name2    | age | age2
------+------------+-----+------
 taro | hanako     |  20 |   30
 toro |            |  30 |   40
(2 rows)
```

この場合name2には値が入っていません（NULL）が適用されます。
これは制約でNOT NULL制約をつけていないからです。
逆にnameはNOT NULL制約をつけているので何も値を入れないと実行されません。
またnameの値はデータ型が可変長文字列であるVARCHAR型のため隙間がありませんが、
name2の値は固定長文字列であるCHAR型のため隙間ができています。



###行の削除
特定の行の削除を行いたい場合は

```
# DELETE FROM テーブル名
WHERE　削除したい箇所の条件;
```

で削除を行います。
またテーブル内の全てのデータを削除したい場合は


```
#
```


```
# SELECT *
FROM Resister;
 name |   name2    | age | age2
------+------------+-----+------
 taro | hanako     |  20 |   30
 toro |            |  30 |   40
(2 rows)
```

この下の行を削除したみたいと思います。

```
# DELETE FROM Resister
WHERE name = 'toro';
```

```
# SELECT *
FROM Resister;
 name |   name2    | age | age2
------+------------+-----+------
 taro | hanako     |  20 |   30
(1 row)
```

###テーブルの削除
テーブルそのものを削除したい場合は

```
#DROP TABLE テーブル名;
```

で削除を行います。

※これはテーブルそのものを削除してしまうので注意が必要です。

###更新


##トランザクション




##補足
###コメントアウトについて