PREPARATION
受験対策

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

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

例題

3.148

社員の情報を記録したempテーブル、部署名の情報を記録したdeptテーブルがある。

=> select * from emp;
 emp_id | emp_name | dept_id
--------+----------+---------
      1 | イチロー |       1
      2 | 菊池雄星 |       1
      3 | 松井秀喜 |       2
      4 | 松坂大輔 |       3
(4 行)

=> select * from dept;
 dept_id |   dept_name
---------+----------------
       1 | マリナーズ
       2 | ヤンキース
       3 | レッドソックス
(3 行)

これらのテーブルを結合して従業員名と部署名が表示された一覧表を作りたい。次のSELECT文の空欄に入るキーワードは何か?

select emp_id, emp_name, dept_name from emp join dept ____ emp.dept_id = dept.dept_id

  1. AT
  2. IN
  3. ON
  4. USING
  5. WITH

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

解答と解説

テーブルを結合するSELECTの記述方法はいくつかありますが、標準的で柔軟な方法はJOIN句に結合対象のテーブル名を指定した後、ON句に結合のための条件式を記述する、というものです。例題の場合は、empテーブルにdeptテーブルを結合し、結合条件式として、emp.dept_id = dept.dept_id を指定していますので、空欄には ON が入ります。

したがって正解はCです。

本問のように2つのテーブルで同じ列名を使っているときは、USING を使い、その後に列名だけをリスト形式で指定するという、簡易な方法をとることもできます。つまり、JOIN dept USING (dept_id) のように指定します。この場合、列名をカッコで括る必要があることに注意してください。

2つのテーブルで同じの名前の列が結合に使う列だけの場合は、より簡易な方法として、NATURAL JOIN dept のように指定することもできます。例題の場合、氏名、部署名の列がそれぞれemp_nameとdept_nameと異なる名前になっていますが、これらがどちらもnameになっているような実装もよくあるでしょう。そのような場合にNATURAL JOINを使うとname列も結合に使われてしまうので注意が必要です。

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

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

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

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

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

サンプル問題/例題解説

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

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

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

無料技術解説セミナー

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

OSS-DB道場

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