#はじめに
『オープンソースデータベース標準教科書 -PostgreSQL-(Ver.2.0.0)Kindle版』を進めています。
同じくこの教科書で学習する人に向けて、また、自分の忘備録として
以下に、上記教科書を進めた手順を記録します。
今回のテーマは「SQLによるDBの操作 基礎」!
##今回つまずいたこと
・DBeaverでCREATE文を実行してもテーブルが作れない →解決( [ 2.全件全項目検索 ] 参照)
##環境
ホストPC:Windows10
GUI DBツール:DBeaver
仮想化ソフト:VirtualBox
ゲストPC:Vagrant(=CentOS7=仮想マシン)
コンテナ型仮想環境:Docker
CUI DBクライアント:PostgreSQL
#前回までの内容と今回の内容
前回の内容
『OSS-DB標準教科書』1_PostgreSQL実習環境の準備
今回の内容
標準教科書を最初から読み進め、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表の全件全項目検索を行います。
SELECT*FROM customer;
を実行します。
これをDBeaverのどこに入力すれば良いのでしょうか?
ひとまず、前回表を作ったときのSQLに続けて入力してみます。
実行!
エラーになりました。
エラー文:SQLエラー [42P01]: ERROR: relation "customer" does not exist 位置: 13
・・・なんだか、前回新規DB「ossdb」を作ったけど、DBeaverを再起動すると「このDBは存在しません」のエラーが出たときと、似たエラーな気がする。あるはずなのに、無いと言われている、という点で、似ている。
そもそも、 ↓このテーブルの欄に、前回作ったはずの「customer表、prod表、orders表」が表示されていない時点で、変な気がする。
今は「スキーマ」の中に「public」しか存在いしていないけど、本来は、前回作った「customer表、prod表、orders表」が入っているスキーマが、「public」と並列になるかたちで表示されるのでは??
そもそもスキーマって何?
↓こちらの記事に、図入りでわかりやすく説明されていました。
PostgreSQLにおいて実際のデータはテーブルに格納されます。テーブルは目的に応じて複数作成することができ、それをまとめているのがデータベースですが、さらに PostgreSQL ではデータベースの中にスキーマと呼ばれるものがあります。
スキーマはデータベースに作成されるテーブルや関数といったオブジェクトをグループ化するものです。スキーマが異なれば同じデータベース内であっても同じテーブル名でテーブルを作成することができます。データベースを作成すると、自動的に public と呼ばれる特別なスキーマが作成されます。
(引用元:PostgreSQLにおけるデータベース、スキーマ、テーブルの関係)-DBOnline
「public」は自動的に作成されるスキーマなんだと。
これはやはり、自分で「customer表、prod表、orders表」を入れるスキーマを作らなければならない、ということなのではないか?
スキーマ、作ってみましょう。
「スキーマ」の上で右クリックすると、「新しく作るスキーマ」という選択肢が出てきました。
クリック!
名前を「first_tutorial」と付けて[OK]をクリック
新しいスキーマが出来ました!この中に、前回作った表3つを移動できれば一番良いのですが、それは方法がわからないので(どこに作成した表があるのかすらわからない・・・)、
ここで右クリックしてみたところ、[作成]→[表]という表示があったのでクリックしてみました。
試しにGUIでテーブル作成してみようかとクリックしたのですが、テーブルは作れても、その中の値をGUIでいじる方法がよくわかりませんでした。(データ型とかを設定しようと該当箇所をクリックしても反応しない)
やはりSQLでテーブル作成します。
CREATE文3つは実行成功したのですが、[テーブル]欄には何の変化もありません。
GUIに反映されていない・・・・?
[テーブル]で右クリックし、[更新]をクリックしてみると、
[orders]表だけが反映されました!
[prod]表と[customer]表は、どこへ行ってしまったのでしょうか?
もしや、私はCREATE文3つを一度に記述して、一度に実行しようとしたけれど、
それで実行できたのは最終行の[orders]表だけで、1行目と2行目は、実は個別に実行しなくてはならなかったのでしょうか?
試してみます。
[prod]表と[customer]表のCREATE文それぞれで[Ctrl+Enter]を押し実行。→[テーブル]で右クリックし[更新]をクリック。すると、
できましたー!!
1行1行「実行」する必要があるんですね!
同様の方法で1行1行INSERT文を実行します。
その後、「 SELECT * FROM customer; 」を実行すると・・・
テーブルが表示されました!
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.データ型 に進みます。