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
————————————————-
今回はSELECT文を使って表の結合処理に関する問題を解いていきましょう。
ではさっそく確認していきます。

(解説)
それでは解説をしていきましょう。今回の問題は結論から言ってしまうと該当のSQL文は自己結合の構文となっています。ただ自己結合をいきなり説明すると混乱してしまうと思うので、まずは異なる表を結合してデータを取り出す一般的な結合内容から説明したいと思います。
以下の図をご確認ください。
EMP表(従業員表)とDEPT表(部門表)の2つの表を結合して、従業員名とその従業員が所属している部門名のデータを取り出すイメージ図です。従業員名(ENAME)と部門名(DNAME)は別々の表にデータがあるので関連性がある列を結合キー(DEPTNO列)として表を結合してからデータを取り出す必要があるわけです。それをSQL文で表現すると以下になります。

ON句を使用した結合方法になりますが、ON句の構文と特徴の説明もまとめておきましょう。
ON句以外でも表の結合方法はありますが、それはまた別の機会にご説明するとして・・
さぁ、一般的な表と表との結合方法が理解できたところで自己結合の話をしたいと思います。自己結合だからといって何か別段特殊な方法を使っているというわけではありません。
以下のイメージ図を見てみましょう。従業員名と、その従業員の上司の名前を取り出す内容です。
特徴的なのは使用している表はEMP表のみということです。EMP表は従業員情報が格納されている表で、従業員の上司の情報であるMGR列(マネージャの従業員番号)もあります。上司も従業員の一人になりますので、もちろん従業員番号(EMPNO)があるわけですよね。
イメージ図のようにEMP表をあたかも別々の表があるように見立てて結合処理を行うことを自己結合といいます。別々の表があるように指定するためにEMP表に対して表別名を定義します。SQL文で表現してみましょう。
今回の問題のメインテーマである自己結合がどんなものか確認できたところでそれぞれの選択肢を確認していきましょう。
選択肢1はもう大丈夫ですね。自己結合の構文を使っておりSQL文に問題はありませんので誤りです。
選択肢2も大丈夫でしょう。正しい内容になります。
選択肢3と選択肢4に「内部結合」、「外部結合」という用語が出てきてます。まず「内部結合」というのは表と表とを結合した際に一致したデータのみを表示する結合方式になります。解説のところで出てきたイメージ図2を参考にしてください。従業員「保々」さんのデータは出力されていませんね。これは保々さんのMGR列と一致するデータがEMPNO列に存在しないからになります。「外部結合」は内部結合で得られた結果に加えて一致しない行も含めて表示するという動作になり、JOINキーワードのところを「RIGHT OUTER JOIN」「LEFT OUTER JOIN」「FULL OUTER JOIN」と記述することで実現することができます。※外部結合については – 外部結合の使用 – の回でまた詳しく説明します。
問題のSQL文をみてみると外部結合の構文は使用していないことから内部結合であると判断することができるので選択肢3は正しい内容となります。尚、自己結合であっても外部結合は使用することができますので選択肢4は誤りです。
選択肢5のように結合キー列に索引を作成することでパフォーマンスを意識した構築を検討することはありますが、索引の作成は必須ではありませんので誤りです。
選択肢6に記載がある等価結合とは、今回のSQL文のように結合条件のところにイコール(=)を指定する結合方式になります。それ以外にbetween や >, < などを使った非等価結合というやり方がありますが自己結合だからといって非等価結合が使えないわけではありませんのでこの選択肢も誤りです。
正解は2と3になります。
今回の問題に関するSQL文が実行できるように定義のサンプルと実行結果を乗せておきましょう。
| — table 作成 — — sample データ — |
表の結合処理は知っているけど自己結合の内容が苦手・・という方は結構いらっしゃるかもしれません。おそらく同じ表を結合??という部分がイメージしづらいのではないかと思うのですが、今回のように簡単なデータでイメージ図を作成して、そして実際にSQL文を動作させてみましょう。別々の表として見立ててから通常の結合構文を使用すればよいだけなので変に苦手意識を持つ必要はまったくありません!
それでは今回の講義はこれまでとしましょう。それではまた次回に。
————————————————-
– ORACLE MASTER Silver SQL 2019 のご紹介
– ORACLE MASTER Silver SQL 2019 試験記事トピック一覧
————————————————-
その他の ORACLE MASTER 試験トピック解説講座シリーズ:
【Oracle University講師によるORACLE MASTER Gold DBA 2019 試験トピック解説講座】トピック一覧
————————————————-
