PostgreSQL 12.4文書のまとめノート　1・２章


#### [PostgreSQL 12.4文書](https://www.postgresql.jp/document/12/html/)ノート
※まとめノートです。自分の視点で書いたコードがたまに混ざっております。ライセンスは下部に記載しております。


#### 第1章 さあ始めましょう

- posgreはクラサバモデルを使用
- セッションの構成
    - サーバプロセス
    - クライアントアプリケーション

- TCP/IPを使用。ホストが異なってもOK

- サーバは接続ごとに新しいプロセスをforkする。forkされたサーバプロセスは元のpostgresプロセスと干渉しない。

psqlの内部コマンド
- \h,\q...

#### 第2章 SQL言語
##### 2.2. 概念
- テーブルは行の集合
- 1つのposgreサーバインスタンスで管理されるdbの集合がdbクラスタを構成する
- データベースクラスタはデータベースの集合

##### 2.3. 新しいテーブルの作成
##### 2.4. テーブルに行を挿入

point型は次のように単一引用符と括弧で囲まれた座標を入力にとる

```
CREATE TABLE cities (
    name            varchar(80),
    location        point
);
INSERT INTO cities VALUES ('San Francisco', '(-194.0, 53.0)');
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1347377/24c6a651-0fa5-9742-4fc8-54881399972a.png)


- COPYコマンドはINSERTよりも柔軟性はないが通常高速

##### 2.5. テーブルへの問い合わせ
select
- 選択リストには式を指定できる。as句を使用して出力列を再ラベル付けできる。
- where句で条件付けできる。論理式が真の行を返す。論理演算子（AND、OR、NOT）と比較演算子を使用できる。

- select *は列を追加すると結果が変わってしまうので実用システムでは悪いコードである。

##### 2.6. テーブル間を結合
- 一度に同一テーブルまたは異なるテーブルの複数の行にアクセスすることをを結合問い合わせという。
> 結合問い合わせではすべての列名を修飾するのが良いやり方であると一般に考えられています。 そうすれば、テーブルのいずれかに後で重複する名前を持つ列が追加されても、問い合わせが失敗しません。

##### 2.7. 集約関数

- from > where > group by
- WHERE句はどの行を集約処理に渡すのかを決定するものであり、したがって、集約関数の演算を行う前に評価されなければならないことは明らかです。
- ≒集約関数に渡す集合を絞るので、集約関数を適用する句ではない
> 副問い合わせは、外側の問い合わせで起こることとは別々に集約を計算する独立した演算
> HAVINGを使用すると、グループ化された行にフィルタをかける
> 集約とSQLのWHEREとHAVING句の間の相互作用を理解することが重要です。 WHEREとHAVINGの基本的な違いは、WHEREが、グループや集約を演算する前に入力行を選択する（したがって、これはどの行を使用して集約演算を行うかを制御します）のに対し、HAVINGは、グループと集約を演算した後に、グループ化された行を選択する。

当たり前だが、集約した後にフィルタリングするより、集約する前にwhereでフィルタリングした方が効率的。自明だがwhere句でfalseとなったすべての集合について集約の演算が行われないため。

```
SELECT city, avg(temp_hi)
FROM weather
where city = 'Hayward'
GROUP BY city
-- having city = 'Hayward'
;
```

##### 2.8. 更新
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1347377/47887737-1262-dd44-9952-420c9c33da65.png)
##### 2.9. 削除

<details><summary>ライセンス</summary><div>

法的告知

Copyright © 1996-2020 PostgreSQLはPostgreSQLグローバル開発チームが著作権を有します。

Copyright © 1994-1995 Postgres95はカリフォルニア大学評議員が著作権を有します。

Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the following two paragraphs appear in all copies. [訳注：日本語は参考程度と解釈してください。] 上記の著作権表示、および 本段落と続く2つの段落を全てのコピーに含めることを条件として、無料かつ 書面による許可なしに、このソフトウェアとドキュメントの使用、複製、改変、 頒布をどのような目的にでも許可します。

IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. カリフォルニア大学は、いかなる当事者に対しても、利益の喪失を含む、 直接的、間接的、特別、偶然あるいは必然的にかかわらず生じた 損害について、たとえカリフォルニア大学がこれらの損害の可能性について 知らされていたとしても、一切の責任を負いません。

THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN 「AS-IS」 BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. カリフォルニア大学は、商用目的における暗黙の保証と、特定目的での 適合性に関してはもとより、これらに限らず、いかなる保証もしません。 以下に用意されたソフトウェアは「そのまま」を基本原理とし、 カリフォルニア大学はそれを維持、支援、更新、改良あるいは修正する 義務を負いません。

</div></details>