問題ID: 19665 間違い?

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 | 投稿日時 2017-2-5 21:38
mrbig060418  半人前   投稿数: 6
解答に間違いがあるように思えます。

解答は" 正常に実行されるが、データが1件も表示されない"
となっていおりますが以下の文だと複数行問い合わせのため、
エラーになるのではないでしょうか?


___________________________
SELECT employee_id, employee_name, hiredate
FROM employees
WHERE department_id >
 (SELECT department_id FROM departments
 WHERE department_id NOT BETWEEN 1 AND 5);
___________________________
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2017-2-6 2:23
arashi1977  長老 居住地: 広島  投稿数: 1715
引用:
解答は" 正常に実行されるが、データが1件も表示されない"
となっていおりますが以下の文だと複数行問い合わせのため、
エラーになるのではないでしょうか?
実際にやると正解の通り1件も選択されませんが…
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
に接続されました。
SQL> select department_id, department_name
  2  from departments;

DEPARTMENT_ID DEPARTMENT_NAME
------------- ------------------------
            1 総務
            2 営業
            3 開発
            4 マーケティング
            5 品質管理

SQL>  SELECT employee_id, employee_name, hiredate
 FROM employees
 WHERE department_id >
  (SELECT department_id FROM departments
  WHERE department_id NOT BETWEEN 1 AND 5);   2    3    4    5

レコードが選択されませんでした。
どのようなエラーになると想定されたのでしょうか?
また、解説の以下の部分はどのように理解されてますか?
引用:
DEPARTMENTS表には、DEPARTMENT_ID列の値が1~5のデータが登録されています。
設問のSQL文の副問合せではDEPARTMENTS表のDEPARTMENT_ID列の値が1~5以外のデータを取り出そうとしていますが、DEPARTMENT_ID列の値が1~5以外のデータはないのでデータは1件も取り出されません。

副問合せでデータが1件も取り出されない場合、主問合せにはNULL値が返され、主問合せでの問い合わせ結果も0件となります。
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-2-6 3:27
mrbig060418  半人前   投稿数: 6
想定していたエラーとしては
3行目で単一行比較演算子を使用しているため、
単一行副問合せになりますが、
戻される行は複数ではないのかと思っておりました。

また、実際に試したところ(独自の環境でした。。。)
以下のエラーが出力したため、誤りかと思いました。すみません。

エラー:単一行副問合せにより2つ以上の行が戻されます

■以下、確認として質問になりますが、お答えいただければ幸いです。

1.問題の環境ではNULLが返されるためエラーにならないと考えて良いのでしょうか?

2.本問の副問合せが通常(データがあれば)、返すのは複数であっているのでしょうか?
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2017-2-6 9:01
arashi1977  長老 居住地: 広島  投稿数: 1715
引用:
1.問題の環境ではNULLが返されるためエラーにならないと考えて良いのでしょうか?
WHEREで指定された条件から抽出することのできる行がないだけですので、その理解で良いかと思います。
引用:
2.本問の副問合せが通常(データがあれば)、返すのは複数であっているのでしょうか?
私の実行例にもありますが、設問の3つ目の図では以下の通りdepartmentsテーブルにはdepartment_idが1から5までしか存在しません。なので、BETWEENで1から5以外をもつレコードを条件指定していても返せるレコードがないので、複数返すことはありえないですね…
引用:
SQL> select department_id, department_name
2 from departments;

DEPARTMENT_ID DEPARTMENT_NAME
------------- ------------------------
1 総務
2 営業
3 開発
4 マーケティング
5 品質管理
「本問の副問合せ」というのがSQL文そのものを指しているのであれば、対象となるテーブルにどんなレコードがあるかによって結果が変わる、としか言えないと思いますよ
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2017-2-6 11:47
mrbig060418  半人前   投稿数: 6
ご回答ありがとうございます。

もう少し文の意味を考えるべきでした。
ご説明いただいたおかげで理解が深まりました。

お騒がせしてすみません。

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.