今回は、Silverの「S3 開発/SQL - S3.1 SQL コマンド(SELECT 文)」からの出題です。
select * from emp e, 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事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.