Agent Grow Tech Notes
🐘

【SQL】OSS-DB Silver 例題をブラウザで動かす(テーブル作成あり・コピペのみ)

2025/01/31に公開

記事の概要

OSS-DB Silverのサンプル問題を使って、ブラウザだけで実際に動かしながら勉強できる方法を紹介します。
基本的な使い方は過去の記事にて紹介していますので、まずはこちらをご確認下さい。
【SQL】OSS-DB Silver サンプル問題を、ブラウザで簡単に動かしてみよう

よって、この記事は続編となっております。

簡単におさらい

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

そして前回、例題をSQLを実行する観点で下記の種類に分類しました。

  • 【簡単】 そのまま実行できるもの(コピー&ペーストですぐ使える)
  • 【やや難】 テーブルを作り、掲載のデータを入れる必要があるもの
  • 【難しい】 テーブルを作り、問題文からデータをテーブルの形式に合わせて作る必要があるもの

今回の難易度は?

前回は 【簡単】 に該当する例題を扱う方法を紹介しました。
であれば今回は 【やや難】 を紹介するのかと思いきゃ、そうでもありません。
実は 【簡単】と【やや難】の中間もあることに気付いたのです(笑)
それを 【普通】 と定義し、今回取り扱うこととします。

難易度の訂正

ちなみに今回の内容からは完全に余談ですが 【やや難】以上の内訳についても、見直しました。
よって、まとめると下記の通りとなります。

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

つまり、【やや難】と【難しい】の違いはテーブル定義を自分で考える必要があるか否かということになります。

【普通】に挑戦!

では、本題に入ります。
そのまま実行できるペーストする場所を使い分ける必要があるものです。
つまり、テーブルやデータを作るSQL文抽出するSQL文それぞれ既に用意されている例題を探します。

例題は・・・これに決めた!

今回はSQL文が短いこの例題が良さそうです。
【出典】Silverの例題解説 - S3 開発/SQL (Ver.3.0) [開発/SQL - 組み込み関数(文字列関数)]

CREATE TABLE test(id INTEGER, val TEXT);
INSERT INTO test VALUES (1, ‘あいうえお’);
SELECT char_length(val) FROM test WHERE id = 1;

使い方、覚えてる?

もし忘れてしまった、または初めての方は上まで戻って頂いて、前回の記事をご確認下さいm(_ _)m
DB-Fiddleにアクセスし、Postgresqlを選ぶんでしたね。
バージョンは何でも良いですが、ひとまず最新で。


そして、SQLを書くエリアは左と右に分かれています。
前回は右側だけ使いましたが、今回はどうでしょうか?

とりあえず貼ってみよう

先程のSQL文をコピーし、右側に貼ってみましょう。
そしてRunボタンをポチッと! さて、クエリは正常に実行できるのでしょうか?


はい、エラーです。
ひとまずエラー内容については、ここでは割愛します。
(※後述しますが、このエラーメッセージを見て違和感を覚えた人は素晴らしいです)

逆側は?

じゃあ、逆側に貼ったらエラーにならないか?


またエラー、メッセージも同じです。
鋭い人はこの時点で根本的な問題点に気付くと思いますが、まだまだ続けます。

両方を使い分けたら?

そうです。
本来の使い方は『両方』を使い分けるのです。
初期画面をよく見ると左側には『CREATE,INSERT,UPDATEなど』の表記があります。


つまり、このように分ければいけるんじゃないか?ということです。


では、試してみましょう! 期待が高まります(笑)※完全なフリです


え?!なんで?エラーです。
メッセージも同じ・・・

エラーの原因

メッセージをよく見ると『あいうえお』の箇所が怪しいことに気付きます。

Schema Error: column "‘あいうえお’" does not exist

そして周辺にフォーカスを当ててみたら、ある事実に気付きます。

これは・・・ただコピペしただけでは気付きにくいですね;

再チャレンジ

原因が分かったところで、囲み文字を半角にして試してみましょう。
まずは、左右を使い分けた場合から。
適切にSELECT文の結果が表示されていることが分かります。


右側に全部貼った場合
SELECT文の結果以外に、CREATE文とINSERT文の実行についても表示されています。


左側に全部貼った場合
正常終了はしますが、結果は表示されません。
クエリとして実行されたわけではないから?というところでしょうか。

結論

貼る位置について

SQL文が正しい状態になっていれば、貼る位置はどこでも正常終了になります。
あとは結果が見られるかどうかでの使い分けとなりますが、私の見解では下記のようになります。

  • 左右それぞれ使い分ける(SELECT文は右側、他は左側)
  • 順番を考慮しないといけない場合は全部右側(SELECTで結果を見た後に、データを変更してその結果を見たいなど)
  • 面倒なら全部右側(余計な結果は表示される。実行時間だけとか)

エラーについて

今回は全角半角が原因だったので、拍子抜けした方もおられるかもしれません。
しかし、実際の現場は何が起こるか分かりません。
このような些細なことも見逃さずに、正しくコーディングするのも私達エンジニアのお仕事です!

さいごに

今回は、難易度の訂正に始まり【普通】レベルのご紹介をさせて頂きました。
次回はまた、ひとつ上のレベルをご紹介したいと思います。

ここまでお付き合い頂き、ありがとうございましたm(_ _)m

Agent Grow Tech Notes
Agent Grow Tech Notes

Discussion