rink_rewさんの投稿一覧
横から失礼します。
ChatGPTの回答云々は一旦おいておいて、単純に本設問を確認してみました。
- 結合しようとしている2つの表がある。
- それぞれの表に、同名の列が2つある。
- 同名の列2つのうち、1つは型も一致、もう1つは型が異なる。
このような状況だと仮定して、回答の選択肢と解説をみると、
- 結合する2つの表の一部の列を結合列として使用する場合
USING句で結合列を指定することで、同名の列が複数ある場合に一部の列だけを結合列として使用できる。
USING句を使用するケースとして適切。
- 結合する2つの表に同じ列名でデータ型の異なる列がある場合
USING句で「同名だが型が異なる列ではない、もう一方の同名の列」を結合列として指定することで、エラーなく結合できる。
※ 前述の#1のケースと意図は同じようなもので、同名の列が複数ある場合にそのうちいずれか1つを指定して、他の同名の列は結合に使用しないというもの。
ちなみに、ChatGPTの回答で正答とされている「結合列の値が一方の表にしか存在しない場合」ですが、これは解説にもある通り「USING句」云々というより「外部結合」の特徴・用途と考える方が妥当かなと思いました。(もちろん外部結合の中でUSING句を使うことはできますが、「結合列の値が一方の表にしか存在しない場合」と「USING句」は試験問題として出題されてきたら、私個人的には話として直接繋がらない印象です)
私の理解がずれているかもしれません。的外れなコメントとなっていたらすみません。
EMPLOYEES表のレコードはEMPLOYEES_IDをキーに、その従業員の名前や上司の情報が格納されているものだと思いますが、MANAGER_ID列自体は「その従業員の上司のEMPLOYEE_ID」を表していて、その従業員に上司がいなければ空です。
本設問の問題文では、
EMPLOYEE_IDが「1008」の従業員と上司が同じである従業員の名前と、上司のEMPLOYEE_IDを出力します。
となっていますが、ここで「上司のEMPLOYEE_ID」の代わりに「上司のMANAGER_ID」と言ってしまうと、「上司の上司のEMPLOYEE_ID」を出力したいということになります。
解説にある正解の実行結果を見ると、列名は MANAGER_ID になりますが、実際に表示されているのは「上司のEMPLOYEE_ID」です。
実務でこういう出力を求めるシチュエーションなら、列別名とかつけると見やすいかなとは思いますけど、ちょっと趣旨から外れますね。
「オブジェクトを格納」はその通りだと思うのですが、「領域」かと問われると、解説にも記載の通りスキーマは「論理的な概念」と捉える方が適切だと思うので、ちょっと違うかなと感じます。
データベースの記憶域として考えれば、表や索引などのオブジェクトが実際に格納されるのはデータファイルということになりますし、スキーマはどちらかといえば、オブジェクトの管理単位のようなものだと理解しています。
とはいえ、黒本などでも「スキーマに格納される」といった表現もありますので、設問の選択肢としてはもう少し具体的な表現となっていた方がスッキリする気がしますね。
この設問だと、確かにおっしゃる通りemployees表のdepartment_idはNULLになり得るので、選択肢のSQLだと「全従業員の」表示にならない可能性ありますね。外部結合が適切ですね。
画像のオプションですが、-l(小文字のエル)ではなく、-I(大文字のアイ)になってるみたいですね...。
dropdbの-iに関しては環境によっては大文字でも小文字でも同じ結果が返るみたいですので間違いではないと言えるかもしれませんが、画像の前の説明部分で小文字ですし、小文字で統一されてた方が望ましいですね。