技術ブログ
目次
Oracle ACEの渡部です。 10/14に開催した 「出版記念特別企画:黒本著者が解説 ORACLE MASTER Silver SQL 試験対策セミナー」 に、非常に多くの方にご参加頂きました。ありがとうございました。
オンラインセミナーで頂戴した質問について、当日回答できないかったものも含め、回答を文章として残しておきたいと思います。 ただし、質問の意図が不明なもの、試験範囲外のものについては除外しています。
不明点や意図の補足などあれば、Twitterで@wrcsus4 (私のTwitterアカウント)までご連絡をお願いします。
ORACLE MASTER新体系において、SQL分野の知識を問う試験です。詳細は以下をご確認下さい。
黒本著者によるORACLE MASTER Silver SQL 2019学習方法
以下の構成でセミナーを進めました。
なお、Oracle Live SQLについては、以下の記事も参考にしてください。
環境構築が不要なORACLE MASTERのSQL学習方法(Oracle Live SQL)
自分の質問が抜けている、質問の主旨を取り違えているなどあれば、 Twitterで@wrcsus4 (私のTwitterアカウント)までご連絡をお願いします。
SELECTの集計項目を別名をHAVING に使用できますか?
select job, count(*) as abc from emp group by job having abc > 1;
使用できません。
SQL> select job, count(*) from emp
2 group by job
3 having count(*) > 1;
JOB COUNT(*)
---------- ----------
SALESMAN 3
ASSISTANT 2
SQL> select job, count(*) as abc from emp
2 group by job
3 having abc > 1;
having abc > 1
*
行3でエラーが発生しました。:
ORA-00904: "ABC": 無効な識別子です。
この動作はマニュアル記載の通りです。
別名はORDER BY句の中で使用できますが、問合せ内のその他の句には使用できません。
join のみ記述すると inner join と同じ意味になるということでしょうか?
はい、その通りです。
INNER INNERを指定すると、内部結合を明示的に指定できます。
すなわち、INNERは省略可能ということです。
6-5の問題 dで、COUNT(job_id)とCOUNT(*)に違いはありますか。
これについては、黒本のP167「COUNT ファンクションと NULL」に説明があるので、こちらを確認してください。
端的に言うと、
相関副問い合わせの場合、表のそれぞれの行に対して1行ずつ処理が実行されるということは、処理が重くなるということでしょうか?
SQL一般の話になりますが、SQLの処理パフォーマンスについては、データ量、インデックスの構成、SQLの巧拙に依存する話になるため、一概に速くなる、遅くなると論じることはできません。 この前提の上での話となりますが、確かに相関副問い合わせは内部処理は複雑であるため、場合によっては処理パフォーマンスが低下する可能性があります。
よって、実務的には、「相関副問い合わせを使った場合は、処理パフォーマンスが適切なものになっているか、適切にインデックスを使ってるいるか、特に注意を払おう、特にデータ量が多い場合には」というスタンスで考えるのが妥当かなぁとは思います。
なお、インデックスを使用しているかどうかのチェックは、実務上重要ではありますが、Silver SQL試験の範囲外です。詳細を知りたい場合は、「実行計画」「インデックス」などのキーワードで調査してみてください。
HAVINGはGROUP BYがないと使えないのでしょうか?
はい、HAVINGはGROUP BYとともに使う必要があります。
マニュアル記載の構文ルールでも、HAVINGはgroup_by_clauseの一部として定義されています。
https://docs.oracle.com/cd/F19136_01/sqlrf/SELECT.html#GUID-CFA006CA-6FF1-4972-821E-6996142A51C6
group_by_clause::= GROUP BY { expr | rollup_cube_clause | grouping_sets_clause } [, { expr | rollup_cube_clause | grouping_sets_clause } ]... [ HAVING condition ]
DROP TABLEで削除した表を参照しているシノニムは、削除されないとありますが、無効になるという認識でよろしいですか?
はい、その通りです。
SQL> SELECT object_name, status FROM USER_OBJECTS WHERE object_name = 'S9';
OBJECT_NAME STATUS
------------------------------------------------ -------
S9 VALID
SQL> DROP TABLE t9;
表が削除されました。
SQL> SELECT object_name, status FROM USER_OBJECTS WHERE object_name = 'S9';
OBJECT_NAME STATUS
------------------------------------------------ -------
S9 INVALID←★
主問い合わせのテーブルを副問い合わせでも使用していると相関副問い合わせ、それ以外は、通常の副問い合わせという整理でよいのでしょうか
いいえ、主問い合わせのテーブルのデータと、副問い合わせのテーブルのデータを「相関」させているかがポイントになります。P256の相関副問合せでは、「WHERE s.empno=e.empno 」で、主問い合わせのテーブルのデータと、副問い合わせのテーブルのデータを「相関」させています。
SELECT ename, sal FROM emp1 e
WHERE sal < ( SELECT MAX(sal) FROM sal_hist s WHERE s.empno=e.empno );
たとえば、以下のSQLでは、副問合せで主問い合わせのテーブルを参照していますが、相関副問合せではありません。(若干、急ぎで無理やり作ったSQL例なので、処理内容が意味不明ですが…)
SQL> SELECT ename, sal FROM emp1 e
2 WHERE sal < ( SELECT MAX(sal)
3 FROM sal_hist s WHERE s.empno= ANY(SELECT empno FROM emp1) );
ENAME SAL
-------- ----------
Jack 720
Ken 600
Maria 800
2020年から、ORACLE MASTER新体系が導入されています。 ORACLE MASTER新体系の大きな特徴は、試験がOracle Databaseのバージョンに1対1に対応しなくなったことです。
これにより、原則的にOracle Databaseのバージョンに依存しない本質的な内容が問われる形になっています。よって、特に理由がない限り、旧体系(Oracle 12c向け試験)ではなく、新体系の試験を受験することをお勧めします。
新資格体系ORACLE MASTER 2019とは – 18c/19c対応
コーソルでは、以下のORACLE MASTER関連書籍を執筆しています。
ORACLE MASTER Bronze DBA 2019試験対策本を執筆しました
ORACLE MASTER Silver DBA 2019黒本を執筆しました
黒本著者によるORACLE MASTER Silver SQL 2019学習方法
これらの書籍には、「PC操作すらおぼつかない新卒入社者であっても、研修開始後約3か月半でORACLE MASTER Bronzeを取得できる」教育ノウハウが注ぎこまれています。
コーソルは、Oracle Databaseをはじめとするオラクル製品と仮想化製品に特化してプロフェッショナルサービスを提供する企業です。
コーソルは、エンジニアのスキルアップを重視する会社であり、それを十二分に踏まえて、人事制度や資格取得支援制度がつくられています。
制度面を整えるだけではなく、現場レベルで試行錯誤しながらエンジニア育成に奮闘しています。 コーソルは、会社創設3年後の2007年4月から毎年継続して新卒を採用しています。また、近年はおおむね4半期ごとに第二新卒を採用しており、 未経験者の育成には定評があります。
db tech showcase Tokyo 2019 コーソルのエンジニア育成セッション 発表骨子と資料の公開 #dbts2019
ORACLE MASTERの最上位試験であるPlatinumについては、Oracle Databaseについての多くの知識を問う丸2日間の実技試験であることによる有用性を高く評価し、若手エンジニアが成長するなかで取る資格として位置付けています。
その結果、コーソルはORACLE MASTER Platinumについて2016年6月以降 累計 No.1/7年連続単年 No.1を達成しています。
7年連続ORACLE MASTER Platinum取得者数No.1! Oracle Certification Award 2020
ORACLE MASTER Platinum取得に向けての取り組みについては、日本オラクル Oracle University様の人材育成活用事例として取り上げられています。