株式会社コーソル

コーソルDatabaseエンジニアのブログ

技術ブログ

ORACLE MASTER Silver SQL 2019試験対策セミナー フォローアップ

Oracle ACEの渡部です。 10/14に開催した 「出版記念特別企画:黒本著者が解説 ORACLE MASTER Silver SQL 試験対策セミナー」 に、非常に多くの方にご参加頂きました。ありがとうございました。

オンラインセミナーで頂戴した質問について、当日回答できないかったものも含め、回答を文章として残しておきたいと思います。 ただし、質問の意図が不明なもの、試験範囲外のものについては除外しています。

不明点や意図の補足などあれば、Twitterで@wrcsus4 (私のTwitterアカウント)までご連絡をお願いします。

ORACLE MASTER 新Silver SQL黒本オンラインセミナーについて

  • 名称 : 【オンライン限定】出版記念特別企画:黒本著者が解説 ORACLE MASTER Silver SQL 試験対策セミナー
  • 日時 : 2021年10月14日(木) 15:00~17:00 (接続開始 14:30)
  • 参加費 : 無料
  • 申込URL : https://www.oracle.com/jp/education/news-172121-ja.html#20210816-4
  • 主催: 株式会社コーソル、株式会社翔泳社、日本オラクル株式会社

ORACLE MASTER Silver SQL 試験とは

ORACLE MASTER新体系において、SQL分野の知識を問う試験です。詳細は以下をご確認下さい。

黒本著者によるORACLE MASTER Silver SQL 2019学習方法

セミナーの構成

以下の構成でセミナーを進めました。

  1. 学習の進め方についてのアドバイス
  2. 自習に役立つノウハウや知識(Oracle Live SQLやSQL*Plusの紹介、学習用データの紹介)
  3. 黒本 練習問題の解説(1章~9章)
  4. 頂戴した質問への回答(時間があれば)

なお、Oracle Live SQLについては、以下の記事も参考にしてください。

環境構築が不要なORACLE MASTERのSQL学習方法(Oracle Live SQL)

オンラインセミナーでいただいた質問への回答

自分の質問が抜けている、質問の主旨を取り違えているなどあれば、 Twitterで@wrcsus4 (私のTwitterアカウント)までご連絡をお願いします。

HAVING句で列別名を使用できるか?

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句の中で使用できますが、問合せ内のその他の句には使用できません。

"INNER"の省略

join のみ記述すると inner join と同じ意味になるということでしょうか?

はい、その通りです。

INNER INNERを指定すると、内部結合を明示的に指定できます。

すなわち、INNERは省略可能ということです。

COUNT(<列名>)とCOUNT(*) の違い

6-5の問題 dで、COUNT(job_id)とCOUNT(*)に違いはありますか。

これについては、黒本のP167「COUNT ファンクションと NULL」に説明があるので、こちらを確認してください。

端的に言うと、

  • COUNT(< 列名 >) は、指定した列の値が NULL である行はカウント対象から除外します。
  • COUNT(*) は、列値を一切考慮せず、単純に行数をカウントします。

相関副問い合わせのパフォーマンス

相関副問い合わせの場合、表のそれぞれの行に対して1行ずつ処理が実行されるということは、処理が重くなるということでしょうか?

SQL一般の話になりますが、SQLの処理パフォーマンスについては、データ量、インデックスの構成、SQLの巧拙に依存する話になるため、一概に速くなる、遅くなると論じることはできません。 この前提の上での話となりますが、確かに相関副問い合わせは内部処理は複雑であるため、場合によっては処理パフォーマンスが低下する可能性があります。

よって、実務的には、「相関副問い合わせを使った場合は、処理パフォーマンスが適切なものになっているか、適切にインデックスを使ってるいるか、特に注意を払おう、特にデータ量が多い場合には」というスタンスで考えるのが妥当かなぁとは思います。

なお、インデックスを使用しているかどうかのチェックは、実務上重要ではありますが、Silver SQL試験の範囲外です。詳細を知りたい場合は、「実行計画」「インデックス」などのキーワードで調査してみてください。

HAVINGとGROUP BY

HAVINGはGROUP BYがないと使えないのでしょうか?

はい、HAVINGはGROUP BYとともに使う必要があります。

マニュアル記載の構文ルールでも、HAVINGはgroup_by_clauseの一部として定義されています。

表削除時のシノニム

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

参考: ORACLE MASTER関連情報

ORACLE MASTER新体系について

2020年から、ORACLE MASTER新体系が導入されています。 ORACLE MASTER新体系の大きな特徴は、試験がOracle Databaseのバージョンに1対1に対応しなくなったことです。

これにより、原則的にOracle Databaseのバージョンに依存しない本質的な内容が問われる形になっています。よって、特に理由がない限り、旧体系(Oracle 12c向け試験)ではなく、新体系の試験を受験することをお勧めします。

新資格体系ORACLE MASTER 2019とは – 18c/19c対応

コーソル執筆のORACLE MASTER関連書籍

コーソルでは、以下のORACLE MASTER関連書籍を執筆しています。

ORACLE MASTER Bronze DBA 2019試験対策本を執筆しました

ORACLE MASTER Silver DBA 2019黒本を執筆しました

黒本著者によるORACLE MASTER Silver SQL 2019学習方法

これらの書籍には、「PC操作すらおぼつかない新卒入社者であっても、研修開始後約3か月半でORACLE MASTER Bronzeを取得できる」教育ノウハウが注ぎこまれています。

参考: コーソルのエンジニア育成とORACLE MASTER

コーソルは、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様の人材育成活用事例として取り上げられています。

  • 本記事は情報提供を目的にしています。情報には正確を期していますが、これを保証するものではありません。
  • 書籍に関する質問については、書籍記載の「本書内容に関するお問い合わせについて」を参照してください。これで解決しない場合は、翔泳社の問合せページから問い合わせてください。
  • オラクル社の試験については、Oracle University に確認ください。

プロフィール

On7tWW6m1Ul4

渡部 亮太

・Oracle ACE
・AWS Certified Solutions Architect - Associate
・ORACLE MASTER Platinum Oracle Database 11g, 12c 他多数

カテゴリー

アーカイブ