【SQL】OSS-DB Silver 例題をブラウザで動かす(テーブル定義から作る)
記事の概要
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
Discussion