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回、第5回に引き続き今回も副問合せに関する問題を扱っていきます。

それでは問題を見ていきましょう。

(解説)

それでは解説をしていきましょう。まずは「第4回 単一行の副問合せを使用した問合せ」「第5回 複数行の副問合せを使用した問合せ」と学習をした内容を思い出してください。これらの副問合せの動作は、まず副問合せ側に記述されたSQL文を実行して結果セットを取得し、その値を主問合せ側に戻していました。つまり副問合せ側のSQL文単体で動作もさせることが出来るということですね。

では今回の問題文に記載がある副問合せ側のSQL文はどうでしょうか?副問合せ内のWHERE句のところに着目しましょう。

WHERE句の内容は表の結合条件が記載されており、表別名e1のdepartment_id列と表別名e2のdepartment_id列で結合するように記述してあります。表別名e2については副問合せ内のFROM句で指定しているemployees表の表別名であることが分かりますが、表別名e1については副問合せ内のSQL文にはどこにも記述がありません。ではどこで指定してあるかというと主問合せ側にあるFROM句で指定してあるemployees表の表別名として指定があります。

つまり副問合せ内に記述があるSELECT文を実行するためには主問合せ側の情報も用いて実行する必要があるということになります。単体で副問合せ内のSQL文を実行することはできません。

このSQL文が全体として実際にどのように動作するのかを以下にまとめました。

4まで実行されたらEMPLOYEES表(表別名e1)の次の候補行に対しても1~4の動作を繰り返します。主問合せ側で処理をしたい行ごとに副問合せ内のSQL文を実行するようなステップ実行を繰り返す副問合せのことを「相関副問合せ」といいます。

さあ、相関副問合せの動作が確認できたところで問題の選択肢を見ていきましょう。

選択肢1は単一行副問合せのことを述べているので誤りです。

選択肢2は、相関副問合せのことを学習しておかないと引っかかりそうですね。WHERE句の指定に問題はありませんので誤りです。

選択肢3は相関副問合せではなく通常の副問合せの説明になりますので誤りです。

選択肢4と5が相関副問合せのことを述べているので正しいですね。

正解は4と5になります。

尚、この相関副問合せはDELETEやUPDATEといった更新処理に対しての副問合せでも使用できますので合わせて押さえておきましょう。

今回使用した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としています

以下は今回の問題のSQL文を実際に実行した結果になります。

副問合せに対して3回連続で講義を実施させていただきました。定義サンプルも掲載しましたので是非実際にSQL文を書いて色々と動作確認をしてみてください。今回の講義内容も含め、SQLの操作になれてくれば次のステップであるチューニング系の話になったときにもスムーズに学習を進めることができるようになるでしょう。それでは今回の講義はこれまでとします。お疲れ様でした!

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

ORACLE MASTER Silver SQL 2019 のご紹介

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

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

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

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

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