Agent Grow Tech Notes
🦾

【SQL】OSS-DB Silver 例題をブラウザで動かす(テーブル定義から作る)

2025/02/05に公開

記事の概要

OSS-DB Silverのサンプル問題を使って、ブラウザだけで実際に動かしながら勉強できる方法を紹介します。
この記事は続編(4回目) となっております。
まずは前回までの記事を読んで頂くことで、何をやろうとしているのかが分かると思います。

※初回:基本~簡単編はこちら↓
【SQL】OSS-DB Silver サンプル問題を、ブラウザで簡単に動かしてみよう
※2回目:普通編はこちら↓
【SQL】OSS-DB Silver 例題をブラウザで動かす(テーブル作成あり・コピペのみ)
※3回目:やや難編はこちら↓
【SQL】OSS-DB Silver 例題をブラウザで動かす(自分でデータを作る)

簡単におさらい

用意するものは下記の2つ

今回の難易度は?

【難しい】 に該当する例題を扱います!

  • 【簡単】そのまま実行できるもの(コピー&ペーストですぐ使える)
  • 【普通】そのまま実行できるが、ペーストする場所を使い分ける必要があるもの
  • 【やや難】掲載のデータをテーブルに入れるため、データフォーマットを考える必要があるもの
  • 【難しい】テーブル定義から考える必要があるもの

【難しい】に挑戦!

では、本題に入ります。
上記で私が定義した内容では『テーブル定義から考える必要がある』と書いています。

要するにテーブルを作成するDDL(CREATE TABLE文)が用意されていないので、自分で定義しなくてはならないものです。

問題文を読んで、データを見た上で適切な器を用意します。

例題は・・・これ!

【出典】Silverの例題解説 - S3 開発/SQL (Ver.3.0) [S3.1 SQL コマンド(SELECT文)]


データの中身は問題から読み取れますが、テーブル定義はありません
自分で考えて、DDL(CREATE文)に起こす必要があります。

テーブル定義を作ろう!

では、テーブル定義DDL(CREATE文) として作成しましょう!
今回は2つのテーブルが存在するので、CREATE文も2つとなります。
1つずつ見ていきましょう。

1つ目:deptテーブル

まずは、こちらから。


見やすくすると、こんな感じでしょうか。

dept_id dept_name
1 営業部
2 開発部

見た目のまま、単純なテーブル定義を書いてみます。

CREATE TABLE dept (dept_id INTEGER ,dept_name VARCHAR);

問題を解くためだけであれば、そのままでも問題はありません。
しかし、特別な事情が無い限りは主キーを必ず設定します。
このテーブルの場合は、dept_idでデータを識別していると考えることが出来ます。

  • 『1番』は『営業部』なのだな。
  • 『2番』は『開発部』なのだな。

と、いう感じです。
もしdept_idに主キーが設定されていないと、下記のようなデータが発生することがあります。

dept_id dept_name
1 営業部
2 開発部
2 経理部

「おいおい『2番』は『開発部』なの?『経理部』なの?」という状況になり、ユーザ業務に支障が出ます。

少し話が逸れましたが、主キーを設定したテーブルに直してみましょう。

CREATE TABLE dept (
   dept_id INTEGER PRIMARY KEY
  ,dept_name VARCHAR
);

dept_idに『PRIMARY KEY』を追加することで、主キーを設定しました。
書き方は他にもありますが、今回は割愛します。

あとは、前回ご紹介した『データを作成するためのDML(INSERT文)』 を使えば、問題文通りのデータが完成します。

INSERT INTO dept VALUES( 1,'営業部')
                      ,( 2,'開発部');

全件を参照するSELECT文は問題文にありますので、そのままDB-Fiddleにコピペして実行します。


このように正常終了となりテーブルのデータが表示されます!

2つ目:empテーブル

やること自体は1つ目と変わらないので、SQL文と結果のみ記載します。
よろしければ、ご自身でトレースしてみて理解を深めて頂けると幸いです^^


テーブル定義を作ります。

CREATE TABLE emp (
   emp_id  INTEGER PRIMARY KEY
  ,dept_id INTEGER
  ,emp_name VARCHAR
);

データを作ります。

INSERT INTO emp VALUES( 1,1,'鈴木イチロー')
                      ,( 2,2,'松井秀喜')
                      ,( 3,1,'松坂大輔')
                      ,( 4,2,'佐々木主浩');

問題文のSELECT文をそのまま使います。

SELECT * FROM emp;

実行します!


どうでしょうか?
デーブル定義~データ作成~データ参照までのSQL文を使った流れが理解出来ましたでしょうか?

あとは

忘れてはいけないのですが、問題文ですので問題を実際に解くのをお忘れなく(笑)

実際に本文に記載されているSQLをコピペして実行すると、エラーになることもあります。
その場合は、エラーメッセージもヒントになりますので、弄りながら覚えると良いと思います!
その方が、実践レベルで身に着くのではないかと。

さいごに

これで、全4回に渡るOSS-DB Silverの例題を実際に『簡単に』動かしてみる企画は終わりです。

この方法は、資格試験対策の勉強としては遠回りです。
ですが、現場では実際にコーディングして動かすことになりますので、このように資格試験の一環として一緒に勉強するのも、有効な手段だと考えています。

これを真面目に勉強と捉えるよりも、勉強の息抜きとして気楽に弄るくらいの気持ちの方が、より楽しく且つ理解が深まり、スキルアップに繋がるのではと思います。

では、今回は以上です。
ここまでお付き合い頂き、ありがとうございましたm(_ _)m

Agent Grow Tech Notes
Agent Grow Tech Notes

Discussion