PREPARATION
受験対策

Silverの例題解説
「S3.1 SQL コマンド(SELECT 文)」

今回は、Silverの「S3 開発/SQL - S3.1 SQL コマンド(SELECT 文)」からの出題です。

例題

3.126
部署IDと部署名を格納したdept表、従業員ID、従業員名、生年月日、部署IDを格納したemp表があり、それぞれ以下のような構造になっている。

これらの表を結合し、従業員の一覧を表示するときに部署名を表示できるようにするSELECT文として適切なものを3つ選びなさい。

  1. select * from emp, dept join dept_id;
  2. select * from emp e, dept d where e.dept_id = d.dept_id;

  3. select * from emp natural join dept;
  4. select * from emp join dept using (dept_id);
  5. select * from emp e join dept d where e.dept_id = d.dept_id;

※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2021年4月22日

解答と解説

リレーショナルデータベースでは関連するデータが正規化により複数のテーブルに分割されていることが多いため、それらを結合して利用することが非常に多くなります。テーブルを結合することをジョイン(JOIN)と呼びますが、そのためのSQLの記述方法は複数あります。自分でSQLを書くだけならそのうちのいくつかの方法を理解するだけで足りますが、他人が書いた異なる流儀のJOINを読むこともあるでしょうから、概略は理解しておきましょう。

結合のための方法の1つは、結合対象のすべてのテーブルをFROM句にカンマで区切って並べ、結合するための条件をWHERE句に記述するものです。例題の場合は、emp表のdept_id列とdept表のdept_id列を結合するので、選択肢Bのような記述になります。
もう一つの方法は、結合対象のテーブルをFROMより後のJOIN句に記述するものですが、このときの結合条件の記述方法には主なものが3通りあります。

1つは結合条件をON句に記述するもので、選択肢Eのwhereをonで置換すればその方法になります。
この例題のように結合に使う列名が両方のテーブルで同じ時には、USING句を使い、カッコ内に結合に使用する共通の列名を記述することで、それをON句に記述する論理式に代えることができます。これは選択肢Dのような記述になります。
JOINの前にNATURALと指定することで、USING句を省略することもできます。選択肢Cのような記述です。ただしこの場合、2つのテーブルで同じ名前の列が複数あった場合、そのすべてを結合条件として使ってしまうので、それが望む動作でない場合は、USING句を使って結合に使う列を指定しなければなりません。
選択肢AとEは構文エラーになるので実行できません。

従って正解はB、C、Dです。

大抵の結合はFROMとWHEREだけでも記述できてしまうのですが、外部結合をするときはJOINを使う必要があります。また、JOINを使うことで、データの絞り込みはWHERE句、テーブルの結合条件はON(またはUSING)句という形式に整理されたわかりやすいSQLを記述できますので、JOINを使用した結合をすることを勧めます。

今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。

※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。

企業の基幹システムや業務システム、AIなどの
新領域での「PostgreSQL」の採用が拡大している中、
昇格・昇給・就職・転職に必ず役立つ認定です

OSS-DBの受験対策について

受験の学習をサポートする情報や対策に役立つ情報をご紹介

サンプル問題/例題解説

例題 のアーカイブを試験ごとにまとめています。OSS-DB技術者認定試験の学習にお役立てください

学習教材・教育機関のご紹介

OSS-DB認定教材や教育機関について詳しくご説明いたします。

無料技術解説セミナー

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。

OSS-DB道場

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。