DBeaverでCREATE文を実行してもテーブルが作れない_『OSS-DB標準教科書』2-SQLによるDBの操作 基礎

#はじめに
『[オープンソースデータベース標準教科書 -PostgreSQL-（Ver.2.0.0）Kindle版](https://www.amazon.co.jp/%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E6%A8%99%E6%BA%96%E6%95%99%E7%A7%91%E6%9B%B8-PostgreSQL-%E5%AE%AE%E5%8E%9F%E5%BE%B9-ebook/dp/B00BW2KFSW/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9&qid=1617198796&sr=8-1)』を進めています。
同じくこの教科書で学習する人に向けて、また、自分の忘備録として
以下に、上記教科書を進めた手順を記録します。
今回のテーマは「SQLによるDBの操作 基礎」！

##今回つまずいたこと
・DBeaverでCREATE文を実行してもテーブルが作れない　→解決（ [ 2.全件全項目検索 ] 参照）


##環境
ホストPC：Windows10
GUI DBツール：DBeaver
仮想化ソフト：VirtualBox
ゲストPC：Vagrant(＝CentOS7＝仮想マシン）
コンテナ型仮想環境：Docker
CUI DBクライアント：PostgreSQL

#前回までの内容と今回の内容
前回の内容
[『OSS-DB標準教科書』1_PostgreSQL実習環境の準備](https://qiita.com/ume-san/items/ee11b75be214e4bb950e)

今回の内容
標準教科書を最初から読み進め、SQL実行の項は前回作ったデータベースに実行していきます。今回は1章（SQLによるDBの操作 基礎編）の中のSQLに関する部分
・1.5　データの検索（SELECT）
・1.6　ORDER BY句による並べ替え
・1.7　表の結合
・1.8　行データの入力（INSERT）
・1.9　データの更新（UPDATE）
・1.10 行データの削除（DELETE）
を進めます。

#1.SELECT文の基本構文
≪標準教科書該当箇所≫
1.5　データの検索（SELECT）

まず、SELECT文の基本構文の復習。
↓これ！

**SELECT [DISTINCT] * | SELECT 項目リスト 
　　FROM 表 名[,…] 
　　[WHERE 検索 条件式] 
　　[GROUP BY グループ化式] 
　　[HAVING 検索条件式] 
　　[ORDER BY 並べ替え式]**

#2.データの検索（SELECT）
≪標準教科書該当箇所≫
1.5.1　全件全項目検索

まず、前回作ったcustomer表、prod表、orders表の全件全項目検索を行います。

```:DBeaver/PostgreSQL
SELECT*FROM customer;
```
を実行します。
これをDBeaverのどこに入力すれば良いのでしょうか？
ひとまず、前回表を作ったときのSQLに続けて入力してみます。
実行！
<img width="500" alt="10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/6c7ff707-5ee4-27b9-d95a-f7bba77cf180.png">
エラーになりました。

エラー文：SQLエラー [42P01]: ERROR: relation "customer" does not exist  位置: 13


・・・なんだか、前回新規DB「ossdb」を作ったけど、DBeaverを再起動すると「このDBは存在しません」のエラーが出たときと、似たエラーな気がする。あるはずなのに、無いと言われている、という点で、似ている。

そもそも、 ↓このテーブルの欄に、前回作ったはずの「customer表、prod表、orders表」が表示されていない時点で、変な気がする。
<img width="700" alt="20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/c8fffabb-7ac0-3738-b950-a42accd8848f.png">
今は「スキーマ」の中に「public」しか存在いしていないけど、本来は、前回作った「customer表、prod表、orders表」が入っているスキーマが、「public」と並列になるかたちで表示されるのでは？？

そもそもスキーマって何？
↓こちらの記事に、図入りでわかりやすく説明されていました。
>PostgreSQLにおいて実際のデータはテーブルに格納されます。テーブルは目的に応じて複数作成することができ、それをまとめているのがデータベースですが、さらに PostgreSQL ではデータベースの中にスキーマと呼ばれるものがあります。
スキーマはデータベースに作成されるテーブルや関数といったオブジェクトをグループ化するものです。スキーマが異なれば同じデータベース内であっても同じテーブル名でテーブルを作成することができます。データベースを作成すると、自動的に public と呼ばれる特別なスキーマが作成されます。
（引用元：[PostgreSQLにおけるデータベース、スキーマ、テーブルの関係](https://www.dbonline.jp/postgresql/schema/index1.html)）-DBOnline

「public」は自動的に作成されるスキーマなんだと。
これはやはり、自分で「customer表、prod表、orders表」を入れるスキーマを作らなければならない、ということなのではないか？

スキーマ、作ってみましょう。
「スキーマ」の上で右クリックすると、「新しく作るスキーマ」という選択肢が出てきました。
クリック！
<img width="400" alt="30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/fff6356b-015e-0540-7bae-5ef21e46c50b.png">

名前を「first_tutorial」と付けて[OK]をクリック
<img witdh="200" alt="60.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/09746a3f-1fbc-c514-2405-54b3688c5fc5.png">

新しいスキーマが出来ました！この中に、前回作った表3つを移動できれば一番良いのですが、それは方法がわからないので（どこに作成した表があるのかすらわからない・・・）、
ここで右クリックしてみたところ、[作成]→[表]という表示があったのでクリックしてみました。
<img witdh"200" alt="40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/8140c102-8b95-b710-af2b-fad55f5f6ff1.png">

試しにGUIでテーブル作成してみようかとクリックしたのですが、テーブルは作れても、その中の値をGUIでいじる方法がよくわかりませんでした。（データ型とかを設定しようと該当箇所をクリックしても反応しない）

やはりSQLでテーブル作成します。
<img width="700" alt="100.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/8ebeb1fc-4ded-6891-ffb4-94f771e31eb4.png">
CREATE文3つは実行成功したのですが、[テーブル]欄には何の変化もありません。
GUIに反映されていない・・・・？
[テーブル]で右クリックし、[更新]をクリックしてみると、
<img width="200" alt="200.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/42879a58-77cd-7ed1-5cdc-595e28344a4a.png">
[orders]表だけが反映されました！
[prod]表と[customer]表は、どこへ行ってしまったのでしょうか？

もしや、私はCREATE文3つを一度に記述して、一度に実行しようとしたけれど、
それで実行できたのは最終行の[orders]表だけで、1行目と2行目は、実は個別に実行しなくてはならなかったのでしょうか？

試してみます。

[prod]表と[customer]表のCREATE文それぞれで[Ctrl+Enter]を押し実行。→[テーブル]で右クリックし[更新]をクリック。すると、
<img width="800" alt="1000.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/a43890b4-2928-20f7-7ce4-20623f3cb4ed.png">
できましたー！！

1行1行「実行」する必要があるんですね！

同様の方法で1行1行INSERT文を実行します。
その後、「 **SELECT * FROM customer;** 」を実行すると・・・
<img width="700" art="1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/0761f075-9334-1978-16ea-e26ba05054ea.png">
テーブルが表示されました！
prod表、orders表についても同じ操作でテーブルを表示させることができました。

次の項目である

≪標準教科書該当箇所≫
-1.5.2　SELECT項目リスト
-1.5.3　WHERE句による絞り込み検索
・1.6　ORDER BY句による並べ替え
・1.7　表の結合
・1.8　行データの入力（INSERT）
・1.9　データの更新（UPDATE）
・1.10 行データの削除（DELETE）

は問題なく完了しました。
明日は　2.データ型　に進みます。