#はじめに
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の型名
)|
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」で実行
すると、エラーになってしまいました。
42601,構文エラーです。
なぜエラー?
→[PostgreSQLのドキュメントにあったこちらのSQL(下記※1)]
(https://www.postgresql.jp/document/9.2/html/tutorial-table.html)を参考に、
CREATE TABLE weather (
city varchar(80),
temp_lo int, -- 最低気温
temp_hi int, -- 最高気温
prcp real, -- 降水量
date date
);
・最後の「 )」の後に「;」を付けて
・INTEGRE → int に変更して
実行しても、エラー。
そこで ※1 のSQLをコピペしてテーブル名と列名のみ変更し実行したところ、成功。
家計簿テーブルが作成されました。
やったー!
ただ、これはデータ型は※1の内容のまま。データ型をもとの家計簿の内容に合わせるとエラーが出てしまう。
なんでやろ??
#テーブル削除
|実行するSQL:2|
|:--|:--|:--|:--|
|家計簿テーブルを削除する|
|DROP TABLE テーブル名|
DROP TABLE 家計簿
【DBeaverの操作】
1.DBナビゲータタグの自分のユーザ名のところで右クリック
2.「SQLコンソールでデータを読み込む」をクリック
3.出てきた画面に上記SQLを打ち込む
4.「Ctrl+Enter」で実行
すると、反応無し。
???
DBナビゲータタグにはまだ「家計簿」テーブルのアイコンが残っている。
もう一度「DROP TABLE 家計簿」を打ち込む。
すると
「家計簿テーブルは存在しません」というエラーが出る。
ということは、家計簿テーブルは削除できているということ?
じゃあなんでまだタグの中に家計簿テーブルのアイコンがあるの?
???
もやもや。
→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に打ち込むと小文字になる。
エラーは出ないものの、私は下部の「Statistics1」の欄に実際にテーブルの形で入力したSQLが表示されるとイメージしていたのに、それが出てこない。
・・・これで良いのか?自分の操作方法が合っているのかどうか、わからない。
そしてまた今回も「DBナビゲータタブ」に「tab1」のアイコンが現れなかった。
DBeaverを再起動したら、現れた。
これは何なのだろう。こういう仕様?それとも再起動せずにアイコン表示させられる方法あるのか?
##テーブル作成とSELECTで抽出(4章問3)
4章問3の問題文で用意されていた下記テーブルを作ってみる。
id | price |
---|---|
1 | 100 |
2 | 149 |
3 | 150 |
4 | 151 |
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つの数値が反映されていない。
DROP TABLE tab1:
でテーブルを一度消して、
・・・・・・
まず
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);
SELECT * FROM tab1 WHERE price >=150;
を実行してみると…
テーブルが表示された!
けど、なぜか4行にわたって同じ結果が繰り返し表示されている…
出てほしい回答は「150」「151」の2行なのに、
「151」のみしか回答として戻されていない。
何で?
・・・・・・
試しに
「WHERE price <120;」
を実行してみる。
SELECT * FROM tab1 WHERE price <120;
OKOK。
・・・・・・
次に「WHERE price <150;」を実行してみる。
SELECT * FROM tab1 WHERE price <150;
「データなし」と返ってきた。何で!?
・・・・・・
なんとなく、もう一度問題文と同じSQLを入力してみる。
すると今度は、「4/151」が1行だけ返ってきた!
最初にやったときは「4/151」が4行返ってきたのに、なんで!?
しかもやはり「3/150」は返ってこない。
もはや何が正しい入力&返しなのかがわからない・・・。
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を再起動すると、消える。再起動せずにアイコンを消す方法はあるのか?