DBeaverでElephantSQL(PostgreSQL)を操作してみる

#はじめに
OSS-DBSilver取得に向けてDBeaverでElephantSQLを触ることでPostgreSQLの操作を学習するぞ！
と、[前回](https://qiita.com/ume-san/items/92f667c525d49402ff33)、DBeaverでElepantSQLに接続するところまで終わりました。

接続を終えて、さあ、試しに『[スッキリわかるSQL入門](https://www.amazon.co.jp/dp/B07L3MX199/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)』で学んだSQLを試してみようかね、と思ったのですが・・・

早速手が止まりました。

SQL忘れてるー。

「テーブル作成→テーブル削除」というシンプルな操作を復習したいと思います。

また、そのあとで[問題集（黒本）](https://www.amazon.co.jp/%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5OSS-DB-Silver%E5%95%8F%E9%A1%8C%E9%9B%86%EF%BC%BBVer-2-0%EF%BC%BD%E5%AF%BE%E5%BF%9C-SRA-Inc-%E6%97%A5%E6%9C%AC%E6%94%AF%E7%A4%BE/dp/4295008745/ref=pd_lpo_14_t_0/356-1159012-3583943?_encoding=UTF8&pd_rd_i=4295008745&pd_rd_r=eff2e70f-74c8-41b2-aa5c-b14b19d1ac69&pd_rd_w=mbxyL&pd_rd_wg=7WyPA&pf_rd_p=cb2cef9d-b0a3-4b58-a575-45abfc5e07e8&pf_rd_r=XNC501GG1BSFYJ3EZ33P&psc=1&refRID=XNC501GG1BSFYJ3EZ33P)の問題と同じSQLをDBeaverで実行してみました。問題自体は解けるし問題文の意味もわかるのですが、実際に問題文と同じSQLをDBeaver上で試してみると、思った通りの返しが返ってきませんでした。結局原因はわからずじまいです。
まだDBeaverの操作に慣れていないので、今はとにかく問題集を進めて、追って操作に慣れてきたら原因を探そうと思います。

#テーブル作成
『スッキリ~』は9章まで終えていましたが、そこではSELECT,INSERT,UPDATE,DELETEなどの命令を使って、既存のテーブルに対してデータを操作する方法を学んでいました。なので、テーブル作成はしたことがありませんでした。
10章(テーブルの作成)を参考に、自分でテーブル作成してみます。

|実行するSQL：1|
|:--|:--|:--|:--|
|家計簿テーブルを作成する|
|CREATE TABLE テーブル名 ( <br> 列名1　列1の型名, <br> 列名2　列2の型名, <br> ・<br>・<br> 列名x　列xの型名 <br>)|

```:DBeaver
CREATE TABLE 家計簿 (
  日付　　　　DATE,
　費目ID     INTEGER,
　メモ       VARCHAR(100),
　入金額     INTEGER,
　出金額     INTEGER
)
```
|データ型名|区分|データ種別|メモ|
|:--|:--|:--|:--|
|DATE型|-|日付|-|
|INTEGER型|整数値|数値|-|
|VARCHAR型|可変長|文字列|VACHAR(100)＝可変長文字列(最大100バイト)|

**【DBeaverの操作】**
1.DBナビゲータタグの自分のユーザ名のところで右クリック
2.「SQLエディタ」をクリック→「SQLエディタ」をクリック
3.出てきた画面に上記SQLを打ち込む
4.「Ctrl+Enter」で実行
すると、エラーになってしまいました。

【エラー画面】
![200.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/838fa251-f4fe-f7d0-4598-996c391c329a.png)

42601，構文エラーです。
なぜエラー？
→[PostgreSQLのドキュメントにあったこちらのSQL（下記※1）]
(https://www.postgresql.jp/document/9.2/html/tutorial-table.html)を参考に、


```:※1
CREATE TABLE weather (
    city            varchar(80),
    temp_lo         int,           -- 最低気温
    temp_hi         int,           -- 最高気温
    prcp            real,          -- 降水量
    date            date
);
```

・最後の「　）」の後に「;」を付けて
・INTEGRE →　int に変更して
実行しても、エラー。

そこで ※1 のSQLをコピペしてテーブル名と列名のみ変更し実行したところ、成功。
家計簿テーブルが作成されました。
![300.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/ce7cdafd-1e4c-657c-ede0-8189c028e743.png)
やったー！
ただ、これはデータ型は※1の内容のまま。データ型をもとの家計簿の内容に合わせるとエラーが出てしまう。

なんでやろ？？

#テーブル削除
|実行するSQL：2|
|:--|:--|:--|:--|
|家計簿テーブルを削除する|
|DROP TABLE テーブル名|

```:DBeaver
DROP TABLE 家計簿
```

**【DBeaverの操作】**
1.DBナビゲータタグの自分のユーザ名のところで右クリック
2.「SQLコンソールでデータを読み込む」をクリック
3.出てきた画面に上記SQLを打ち込む
4.「Ctrl+Enter」で実行

すると、反応無し。

？？？

DBナビゲータタグにはまだ「家計簿」テーブルのアイコンが残っている。
もう一度「DROP TABLE 家計簿」を打ち込む。
すると
![301.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/207c5cdd-75d0-40c0-9a8f-cec8374e38d5.png)

「家計簿テーブルは存在しません」というエラーが出る。
ということは、家計簿テーブルは削除できているということ？
じゃあなんでまだタグの中に家計簿テーブルのアイコンがあるの？

？？？

もやもや。

→DBeaverを閉じてPCを再起動したら、家計簿テーブルのアイコンも消えていた！
これでOK。

→他にテーブルを作って試したところ、DBeaverを閉じてまた起動すれば、DROPしたテーブルのアイコンは消えた。PCのシャットダウンは必要無かった。それにしても、DBeaverを再起動しなければDROPは反映されないものなのだろうか？

#黒本(問題集)をやってみる
まだまだDBeaverでSQLを触った方が良い気もしつつ、
本題の資格取得に向けて勉強を早く始めたいので
次は　[黒本(『OSS-DB Silver ver2.0対応 問題集』)](https://www.amazon.co.jp/dp/B086YWFFPR/ref=sspa_dk_detail_0?psc=1&pd_rd_i=B086YWFFPRp13NParams&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUExNFNNTVRPM1pHOTUyJmVuY3J5cHRlZElkPUEwMTgzMTMxMVExRkVXWUNRNFVVTCZlbmNyeXB0ZWRBZElkPUExQ1NKSEpMWE5UV1dZJndpZGdldE5hbWU9c3BfZGV0YWlsJmFjdGlvbj1jbGlja1JlZGlyZWN0JmRvTm90TG9nQ2xpY2s9dHJ1ZQ==)　に入りたいと思います。

1~3章は一般知識や、インストール、コマンド操作が必要な内容だったので、4章(SQL)からやっていきます。
問2はCRATE TABLE（テーブル作成）とINSERT INTO（値入力）のSQLが登場していました。
DBeaverで「SQLエディタ」→「新しいSQLエディタ」を開き、
問題と同じSQLを打ち込むことで、そのままSQLの練習になりそうです。

##テーブル作成（4章問2）
4章問2のSQLを入力し、「Ctrl+Enter」で実行。
問題集だと「INSERT INTO」「VALUES]は大文字だけど、DBeaverに打ち込むと小文字になる。

![1000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/d9fed929-1607-bc44-5d37-138bc0d13471.png)
エラーは出ないものの、私は下部の「Statistics1」の欄に実際にテーブルの形で入力したSQLが表示されるとイメージしていたのに、それが出てこない。
・・・これで良いのか？自分の操作方法が合っているのかどうか、わからない。
そしてまた今回も「DBナビゲータタブ」に「tab1」のアイコンが現れなかった。
DBeaverを再起動したら、現れた。
これは何なのだろう。こういう仕様？それとも再起動せずにアイコン表示させられる方法あるのか？

##テーブル作成とSELECTで抽出（4章問3）
4章問3の問題文で用意されていた下記テーブルを作ってみる。

|id|price|
|:--|:--|
|1|100|
|2|149|
|3|150|
|4|151|

```:DBeaver
create table tab1 (id INTEGER,price INTEGER);
insert into tab1 values (1,100);
insert into tab1 values (2,149);
insert into tab1 values (3,150);
insert into tab1 values (4,151);
```
↑カラムに名付けする方法ってこれで良かったんだっけ？DBeaver上にテーブルが表示されると思っていたが、表示されず、確認できない。どうやってテーブルの形になっている状態を確認すれば良いの？

上記の内容を「グリット」をクリックして入力できているか確認してみたけれど、カラム名とデータ型は反映されているけどINSERTで入力した4つの数値が反映されていない。

```:DBeaver
DROP TABLE tab1:
```
でテーブルを一度消して、

・・・・・・

まず

```:DBeaver
create table tab1 (id INTEGER,price INTEGER);
```
だけを実行してテーブル作成する。

その後、

```:DBeaver
insert into tab1 values (1,100);
insert into tab1 values (2,149);
insert into tab1 values (3,150);
insert into tab1 values (4,151);
SELECT * FROM tab1 WHERE price >=150;
```

を実行してみると…

![500.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/1641033b-6ea3-4704-8598-ca2741d860ae.png)

テーブルが表示された！
けど、なぜか4行にわたって同じ結果が繰り返し表示されている…
出てほしい回答は「150」「151」の2行なのに、
「151」のみしか回答として戻されていない。
何で？

・・・・・・

試しに
「WHERE price <120;」
を実行してみる。

```:DBeaver
SELECT * FROM tab1 WHERE price <120;
```
すると、こう返ってきた。
![150.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/77e46403-5e4c-be45-2024-79055a5b5614.png)

OKOK。

・・・・・・

次に「WHERE price <150;」を実行してみる。

```:DBeaver
SELECT * FROM tab1 WHERE price <150;
```
「データなし」と返ってきた。何で！？

・・・・・・

なんとなく、もう一度問題文と同じSQLを入力してみる。
すると今度は、「4/151」が1行だけ返ってきた！
最初にやったときは「4/151」が4行返ってきたのに、なんで！？
しかもやはり「3/150」は返ってこない。
もはや何が正しい入力&返しなのかがわからない・・・。
![160.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/1e1be21a-f0b2-2ab0-8fc4-a7e72237e016.png)
SQLが違っているのか？でも、問題文と全く同じ。
私は何を見落としているのだろうか？？

・・・・・・

ちなみにこの問題は
問題：「SELECT * FROM tab1 WHERE price >=150;」で戻される行数は？　（A.0行　B.1行　C.2行　D.3行　E.4行）
答え：C.2行
というもの。
うん。問題文の意味も、答えも、わかる。
でも、実際にDBeaver上で自分で試してみると、思った通りの動きをしてくれない。もどかしい！なぜ！！

#おわりに
DBeaverの操作は全く手探りの状態です。
予想していたのと違う動きを返されるし、私の入力自体が間違っている可能性が高いです。だけど、どこが間違っているのかわからないです。
DBeaverの操作がきちんとできなくても、とりあえず問題集は進めていけるので、とにかく問題集は進めていきます。

現在4章問1~16を解いたのですが、DBeaverでスムーズに実行できるものもあれば、問題の解答自体は理解できてもDBeaverで同じSQLを入力しても解答と同じものが返ってこないものもあります。

進めながら、思い通りの操作ができなくてもいいからDBeaverでSQLを実行してみます。触りながらわかってくることもあると思うので…。


#未解決事項
・テーブル削除（DROP TABLE）を実行してもテーブルのDBナビゲータタグから該当テーブルのアイコンが消えない。DBeaverを再起動すると、消える。再起動せずにアイコンを消す方法はあるのか？