0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-02-17

#はじめに
OSS-DBSilver取得に向けてDBeaverでElephantSQLを触ることでPostgreSQLの操作を学習するぞ!
と、前回、DBeaverでElepantSQLに接続するところまで終わりました。

接続を終えて、さあ、試しに『スッキリわかるSQL入門』で学んだSQLを試してみようかね、と思ったのですが・・・

早速手が止まりました。

SQL忘れてるー。

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

また、そのあとで問題集(黒本)の問題と同じSQLをDBeaverで実行してみました。問題自体は解けるし問題文の意味もわかるのですが、実際に問題文と同じSQLをDBeaver上で試してみると、思った通りの返しが返ってきませんでした。結局原因はわからずじまいです。
まだDBeaverの操作に慣れていないので、今はとにかく問題集を進めて、追って操作に慣れてきたら原因を探そうと思います。

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

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


列名x 列xの型名
)|

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

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
やったー!
ただ、これはデータ型は※1の内容のまま。データ型をもとの家計簿の内容に合わせるとエラーが出てしまう。

なんでやろ??

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

DBeaver
DROP TABLE 家計簿

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

すると、反応無し。

???

DBナビゲータタグにはまだ「家計簿」テーブルのアイコンが残っている。
もう一度「DROP TABLE 家計簿」を打ち込む。
すると
301.png

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

???

もやもや。

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

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

#黒本(問題集)をやってみる
まだまだDBeaverでSQLを触った方が良い気もしつつ、
本題の資格取得に向けて勉強を早く始めたいので
次は 黒本(『OSS-DB Silver ver2.0対応 問題集』) に入りたいと思います。

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
エラーは出ないものの、私は下部の「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

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

・・・・・・

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

DBeaver
SELECT * FROM tab1 WHERE price <120;

すると、こう返ってきた。
150.png

OKOK。

・・・・・・

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

DBeaver
SELECT * FROM tab1 WHERE price <150;

「データなし」と返ってきた。何で!?

・・・・・・

なんとなく、もう一度問題文と同じSQLを入力してみる。
すると今度は、「4/151」が1行だけ返ってきた!
最初にやったときは「4/151」が4行返ってきたのに、なんで!?
しかもやはり「3/150」は返ってこない。
もはや何が正しい入力&返しなのかがわからない・・・。
160.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を再起動すると、消える。再起動せずにアイコンを消す方法はあるのか?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?