Oracle University 講師が ORACLE MASTER 取得を目指している方に向けて試験トピックを解説するブログ連載講座。「ORACLE MASTER Silver SQL 2019」資格取得に向けた試験トピックについて解説します。

————————————————-

今回はORACLE MASTER Silver SQLの試験トピック「副問合せを使用した問合せの解決 – 複数行の副問合せの使用 -」に関連する問題をご紹介いたします。ORACLE MASTER Silver SQL(Exam Number: 1Z0-071-JPN)の詳細につきましては以下URLをご参考ください。

Oracle Database SQL Exam Number: 1Z0-071

URL: https://education.oracle.com/ja/oracle-database-sql/pexam_1Z0-071

第4回に引き続き今回も副問合せに関する問題を扱っていきます。

問題を見ていきましょう。

(解説)

前回講義では単一行副問合せをやりましたが今回は複数行副問合せの内容になります。複数行副問合せは、文字通り、副問合せ内の問合せの結果を複数行扱うことが可能なSQL文になります。比較のために使用する演算子が単一行副問合せとは異なり、INANYALLといった複数行比較演算子を使用する必要があります。ANYやALLの演算子を使用する際には単一行比較演算子で学習した「=、>、>=、<、<=、<>」と組み合わせて使用します。以下にまとめておきましょう。

文章だけをみてても分かりにくいですね。問題文にあったSQL文とデータを用いた実機操作を交えてご説明しましょう。皆さんも操作ができるように表定義とデータのサンプルは後ほど掲載しておきます。

まずは問題文のSQL文の副問合せ部分のみを実行した結果を確認してみます。

得られた結果より、各演算子の説明をしていきます。

  • IN演算子

  • ANY演算子 ( >ANY の例)

  • ALL演算子( >ALL の例)

これで複数行副問合せの動作も確認できましたので問題の選択肢をみていきましょう。選択肢1は大丈夫ですよね。単一行副問合せの構文ではありませんので誤りです。

あわせて選択肢2も単一行副問合せの説明となっていますので誤りです。選択肢3と4ですが副問合せ内にGROUP BY句やHAVING句を指定することは可能ですので誤りです。

選択肢5の>ANY演算子は複数行比較演算子として存在しますので誤りです。問題文にあるSQL文は複数行副問合せとして正常に動作しますので選択肢6が正しい内容ですね。

正解は6になります。

さて、皆さんにはもう一つレベルアップしていただくために「複数列副問合せ」についても学習していきましょう。これまでの副問合せの内容は戻される列は1つのみでしたが副問合せは複数の列を戻すことも可能です。

以下の実行例をみてください。

JOB_ID列とMANAGER_ID列の2つの列値を副問合せから戻していることが確認できます。

「複数列副問合せ」についてもしっかりと押さえておきましょう。

今回使用したSQL文については以下の定義を使用することで実行可能です。是非活用してください。

— sample テーブル作成 —
drop table employees;
create table employees(
        employee_id        number(6)        primary key,
        first_name           varchar2(20),
        last_name            varchar2(25)    not null,
        hire_date              date                 not null,
        job_id                   varchar2(10)    not null,
        salary                   number(8,2),
        manager_id         number(6),
        department_id     number(4)
);

— sample データ挿入 —
insert into employees values(100, ‘Steven’, ‘King’, ’03-06-17′, ‘AD_PRES’, 27000, NULL, 90);
insert into employees values(101, ‘Neena’, ‘Kochhar’, ’05-09-21′, ‘AD_PRES’, 17000, 100, 90);
insert into employees values(120, ‘Matthew’, ‘Weiss’, ’04-07-18′, ‘ST_MAN’, 8000, 100, 50);
insert into employees values(126, ‘Irene’, ‘Mikkilineni’, ’06-09-28′, ‘ST_CLERK’, 2700, 120, 50);
insert into employees values(127, ‘James’, ‘Landry’, ’07-01-14′, ‘ST_CLERK’, 2400, 120, 50);
insert into employees values(128, ‘Steven’, ‘Markle’, ’08-03-08′, ‘ST_CLERK’, 2200, 120, 50);
insert into employees values(145, ‘John’, ‘Russell’, ’04-10-01′, ‘SA_MAN’, 14000, 100, 80);
insert into employees values(146, ‘Karen’, ‘Partners’, ’05-01-05′, ‘SA_MAN’, 13500, 100, 80);
insert into employees values(154, ‘Nanette’, ‘Cambrault’, ’06-12-09′, ‘SA_REP’, 7500, 145, 80);
insert into employees values(155, ‘Oliver’, ‘Tuvault’, ’07-11-23′, ‘SA_REP’, 7000, 145, 80);
insert into employees values(156, ‘Janette’, ‘King’, ’04-01-30′, ‘SA_REP’, 10000, 146, 80);
insert into employees values(205, ‘Shelley’, ‘Higgins’, ’02-06-07′, ‘AC_MGR’, 12000, 101, 110);
commit;

※日付書式はRR-MM-DDとしています

副問合せで出てくる演算子は、説明を文章だけで眺めてると何やら複雑そうに思えるかもしれませんがサンプルデータを用いて実際に動作させることで「案外簡単だな~」と思えてくるのではないでしょうか。今回ご紹介している定義を用いて是非操作してみてください。次回は「相関副問合せ」を扱っていきたいと思います。これまで講義した副問合せの内容をしっかりと身に着けてから臨んでください。

それでは次回にまたお会いしましょう!

————————————————-

ORACLE MASTER Silver SQL 2019 のご紹介

ORACLE MASTER Silver SQL 2019 試験記事トピック一覧

————————————————-

その他の ORACLE MASTER 試験トピック解説講座シリーズ:

【Oracle University講師によるORACLE MASTER Gold DBA 2019 試験トピック解説講座】トピック一覧

————————————————-