「S3 開発/SQL - S3.1 SQL コマンド(SELECT文)」からの出題です。
=> 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文の空欄に入るキーワードは何か?
※この例題は実際の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事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.