【SQL】OSS-DB Silver 例題をブラウザで動かす(テーブル作成あり・コピペのみ)
記事の概要
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
Discussion