【合格体験記】実務経験ないけどOracleDatabase Bronzeに合格(前編：SQL基礎編)

#はじめに
最近3週間に1度ぐらいは何かしらの資格を取らされている新人です。
**Oracle Database BronzeのSQL基礎に合格しました。**

後編：DBA編→ [【合格体験記】実務経験ないけどOracleDatabase Bronzeに合格(後編：DBA編)](https://qiita.com/Kakese_Chan/items/6318ef284bf937a1f1e6)

JavaとRubyの初級資格を獲得した所、会社から**「DBの資格も取ってくれるともっと嬉しいなぁ(意訳)」**と言われたので、受ける事にしました。まあちょうど次何するか迷っていたところだったし、まだ社内待機中で暇なので……。
またSilver以上の資格を取るためにもBronzeは必須らしいので、今後体系的に学んでいくとするならば取っておいて損はないかなと思いました。


#書いた人のスペック
・文系未経験新卒1年目
・本格的な実務経験はなし
・[Java](https://qiita.com/Kakese_Chan/items/256784b541f254d6f696)や[Ruby](https://qiita.com/Kakese_Chan/items/42d973ffffda05c2537d)の初級資格は持ってる
・DBはOracleやPostgreSQLを利用してWebアプリケーション開発研修を行った事がある

#試験がいっぱいOracle DB Bronze
この資格を獲得する為には**「DBA試験」と「SQL試験」の2つの試験を受ける必要があります**。

1つの資格を取るために2つも試験を受けるなんて……というか2試験分というだけあって受験料が高い。若手社員の財布にとってこんなに悲しいことはありません。
弊社には合格さえすれば費用が返ってくる制度があるので、とにかく必ず合格しなければならないという使命感に駆られます。落ちたら待っているのは死。

まずは[公式HPのステップ](https://education.oracle.com/oracle-master-bronze-oracle-database-12c/trackp_284)に沿ってSQLの試験から受ける事にします。本当はどっちからでも良いみたいですが、気分的に先に受けようと思います。

ただSQLの試験なのですが、以下の3種類あります(2019年現在)。
・Bronze SQL基礎I(1Z0-017)
・11g SQL基礎I(1Z0-051)
・12c SQL基礎(1Z0-061)

**どれ受ければいいんだ。**どれを受けてもいいらしい。
わかりにくい……早速物凄くわかりにくい……Javaの時も思ったけどOracleの検定試験って何かと分かりにくいよ……違いも良く分からないよ……。

そこでネットを色々検索していると、**11gや12cよりBronzeの方が簡単**という意見が多かったので、今回はBronzeを受験する事にしました。力はつくかもしれないけど落ちない事が大事。

#step1：書籍で勉強
早速書籍を買いに行きました。ところがここで問題が発生します。

**BronzeSQL基礎Iの書籍がない。**

ここに来ればどんな本でも置いてるというレベルの日本有数の巨大な本屋ですら、BronzeSQL基礎の書籍は置いていなかったのです。本格的に廃盤商品であることが分かります。

という事でより難しいと言われる**12cの白本**を購入しました。

![](https://images-na.ssl-images-amazon.com/images/I/51cYiedFyhL._SX353_BO1,204,203,200_.jpg)
[Amazon](https://www.amazon.co.jp/%E3%80%90%E3%82%AA%E3%83%A9%E3%82%AF%E3%83%AB%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93%E5%AF%BE%E7%AD%96%E6%9B%B8%E3%80%91ORACLE-MASTER-Bronze-SQL%E5%9F%BA%E7%A4%8E-%E8%A9%A6%E9%A8%93%E7%95%AA%E5%8F%B7/dp/4797375418/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=12c&qid=1574755563&sr=8-2)


まあ試験範囲がより広い12cが出来るようになるならBronzeも受かるだろうという算段です。ついでなので資格の外での意味でも知識を身に着けようと思いました。どこまでがBronzeSQL基礎の試験範囲なのか正直よく分かっていませんでしたが、先々の事を見越してとりあえず全部勉強する事にしました。

社内待機中なのでペースとしては1日100ページ(約3章)前後で行いました。(他の事もやってたので8時間＝100Pではないです)
最初は本が分厚いなぁーと思ったのですが、1ページ1ページの紙が厚いだけみたいで、思ったよりもすんなりと進んだ気がします。あとサンプルコードが多いので覚える事だけ抜粋すると大した枚数じゃなくなるかなと。
あとこの書籍、その章や項目の最後にまとめで書かれているのもなかなかポイントが高いです。

一応プログラミング言語と組み合わせてCRUD操作できるアプリを作る、テーブル定義や結合とかもできるという感じの予備知識だったのですが、**関数とか副問い合わせは全然やったことがなくて。** そこが個人的に一番の難所でした。
副問合わせの問題は文が長いし、副問合わせの戻り値を確認しながら解くので結構時間が掛かりました。

そうこうしてテキストを1周分読み終え、章末問題も大抵解けたし付属の模擬試験に挑戦してみようかー！と思い解き始めると、

**おかしい、全然わからん。**

えっ何全然頭に入ってこない。12cだから？いやでもさっきまで解いてた章末問題も12cだったじゃん……と挫折に打ちひしがれ、ここから3日程何のやる気も起きないまま逃避して、発売したばかりのポケモン(当時11月中旬)の事だけを考えて虚無を過ごしました。

#step2：インターネット学習

模擬試験のあまりの難しさに、もう受験辞めようかな……モードに入った私は、とりあえず基本に立ち返り章末問題を解きなおす事にしました。でもやっぱりこっちは解ける。おかしいな。章末問題と模擬試験の間の高い壁を感じる。

12cを受けるわけではないので、12c模擬試験の出来が悪い事は忘れてBronze版の試験に集中しようと思ったのですが、ネットの教材を含め、**試験が古すぎて教材がない**んですよね……。合格体験記の「このサイト使いましたよ」リンクも軒並み404です。
2019年現在、Bronze版を受験する場合は、ある程度Bronzeではない他の教材をうまく活用する必要があるなと思いました。

**■ping-t**
https://ping-t.com/modules/mondai/index.php?content_id=21
**1番役に立ったやつ。**11g・12cの問題集しかありませんが、とても便利です。
どちらかというと11gの方がBronzeに近いと思います。
両方試してみましたが、やはり12cと11gの間でも難易度にかなりの差を感じました。

公式では全ての問題に金マークを付ける事を勧めていますが、そこまでするのは結構大変だと思いますし、自分も全然やってません。
ただもし全て金に出来たのであれば、100%合格できるでしょう。


**■＠IT**
https://www.atmarkit.co.jp/ait/articles/0505/12/news124.html
これは貴重なBronzeの教材です。とりあえずこの一通りの連載の問題を解いてみました。

**■Your Tester**
http://oraclemaster.boo.jp/test/index.html
これはちょっと簡単すぎる気がするけど、気晴らしにはなるかなみたいな。


主にping-tをBronzeと同じ出題数である40問ずつ出題の設定にして、疑似模擬試験みたいな形で行っていました。
参考値でしかないんですが、1回やってみたら合格ボーダー取れたので、それを何度か繰り返して行いました。

#MEMO

**・12cとBronzeの範囲の違い**
　RDBについて　→ Bronzeの出題範囲外
　SQL*plusのコマンド　→　12cでも触れるが分野別にちょこちょこ入るだけなので、一回[ここ](https://www.atmarkit.co.jp/ait/articles/0505/12/news124.html)で練習しておく。
　FETCH等→ Bronzeの出題範囲外
　シノニム・ビュー等　→ **12cより範囲が広い。**12c白本以外に教材を用意するべき。　

**・使用できない場所系**(〇：は使えるもの)
　算術子 →FROM句
　列別名 → WHERE句、GROUP BY句　　〇：ORDER BY
　列の順番 → GROUP BY句
　副問合せ → GROUP BY句
　単一行関数 → 〇：ORDER BY
　グループ関数 → **WHERE句(頻出)**、FROM句、GROUP BY句

**・SELECT文の組み順**
　SELECE句→FROM句→WHERE句→(GROUP BY句・HAVING句)→ORDER BY句

**・""と'**
　''　→文字・日付リテラル
    ""　→列別名

**・パフォーマンス系** (Bronzeの試験ではあんま出なかった)
　IN演算子とOR演算子：同じ
　SQL:1999結合構文とOracle独自結合構文：同じ
　
　データ型変換：明示的＞暗黙的
　表接頭辞：使う＞使わない
　データ削除：TRANCATE＞DELETE
　シノニム・ビューの使用：検索パフォーマンスが向上するわけではない

**・エラーの未発生**
　・NULLを「IS NULL」「IS NOT NULL」以外で比較した場合、データは取れない。
　・INSTER関数失敗時、0を返す。
　・TO_CHAR変換失敗時、#で表示する。
　・副問合わせ0件時、NULLが返る為問い合わせ全体が0件になる。
　・日付型に'で囲った数字を足すと、暗黙的な変換が発生する。
　・同名ビューの作成時、「OR REPLACE」があればエラーにならず再定義する。


#申し込み・受験
挫折から約1週間後、上記の11gの問題に取り組んでコンスタントに80%以上の得点が取れる事から、自信とやる気を取り戻した私は受験を決意しました。

申し込み～受験の詳細に関しては、概ねJavaの時と同じです。以前書いたJavaBronzeの体験記を参照してもらえればと思います。
→[【合格体験記】新人がJava Bronzeに1週間で合格](https://qiita.com/Kakese_Chan/items/256784b541f254d6f696)

アカウントのセッティング等はJavaの時に済ませてあったので省略し、今回も楽天でバウチャーを購入してオンラインで受験しました。楽天の方がやはり安く購入できます。
試験会場に行かなくても出来るというのが大変便利です。受験したシステムに関しても概ねJavaの時と同様です。

試験終了後、CertViewにアクセスするとすぐに結果が出ます。
結果は無事**合格です！**

得点は87%でしたが、11gをやって80%ぐらいだったのでおよそ順当というか予想通りの点数でした。


**■受験した感想**
・ping-tの**11gと比べても簡単**
・12cとはもはや天地の差がある。
・時間も規定の半分程度で終了。
・SQL文を読む内容は少なく、あっても短いか選択肢の差分がとても分かりやすい。(12cだと正しく動作するSQLの中から意味内容が正しいものを探させることも多いが、Bronzeだとそもそも文法的に正しいのがほとんどない、みたいな)
・座学的な内容が非常に多い。
・関数もそんなに出ない。
・12c白本ではコラム程度の扱いだった**シノニムとビューがたくさん出るので要注意**。
・シノニム・ビューに関しては12cの教材だけではなく別途調べたり教材を用意するべき。


#最後に
今回はOracleDatabaseBronzeの片割れの試験、Bronze SQL基礎Iを受験しました。

今回はBronze版を受験しましたが、Bronzeではなく教材が豊富かつ12cよりも簡単な**11gも受験の選択肢にある**かなと思います。Bronzeは簡単ですが的確な教材が少なく、様々なものを組み合わせて行わなければいけない、ヒントが少なくぶっつけ本番になってしまうという部分は少々デメリットに感じました。

とにかくこの体験記で書きたいことは、**12cを先に解いて心が折れないで欲しい**ということです。


後編に続きます→[【合格体験記】実務経験ないけどOracleDatabase Bronzeに合格(後編：DBA編)](https://qiita.com/Kakese_Chan/items/6318ef284bf937a1f1e6)