ここから本文です

オラクルの副問い合わせにて、複数行問い合わせと集合関数の処理がイメージできま...

アバター

ID非公開さん

2017/11/1512:00:39

オラクルの副問い合わせにて、複数行問い合わせと集合関数の処理がイメージできません。

例えば、
select price,prod_name
from sales
where (select count(price) from sales where prod_id > 10)

あまり意味のない感じですがそこは触れずに、、。

このとき、副問い合わせで複数の結果を返すときの流れは、どのようになるのでしょうか?

また、countはどのタイミングでどこを観て集計するのでしょうか?

閲覧数:
41
回答数:
2
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

nora1962jpさん

2017/11/1516:14:31

たぶんこのSQLだと構文エラーになると思います。
(WHERE句で条件指定がされていない)

> select count(price) from sales where prod_id > 10
の結果はテーブルsalesでprod_idが10より大きいものでpriceがNULLでない行数が返りますが、それと比較する対象がありません。
RDBMSによっては結果が1か0でTrueかFalse扱いするものがあるかもしれませんけど。

> このとき、副問い合わせで複数の結果を返すときの流れは、どのようになるのでしょうか?

GROUP BY指定もないので結果は1行だけです。列数も1つなのでスカラ値になります。

> また、countはどのタイミングでどこを観て集計するのでしょうか?

(select count(price) from sales where prod_id > 10)
の段階で評価されます。相関副問合せではないのでこのSQLなら最初に処理されると思います。

  • アバター

    質問者

    ID非公開さん

    2017/11/1519:27:49

    例えが悪くすみません。
    group by があったとして、複数行返す場合は、一行ずつ主問い合わせまでフォーカスするのでしょうか?
    また、countは一行ずつ実行されて、group by別に新しいcountが用意されるのでしょうか?

  • その他の返信(4件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

アバター

質問した人からのコメント

2017/11/20 20:52:38

ありがとうございました。

ベストアンサー以外の回答

1〜1件/1件中

ste********さん

編集あり2017/11/1516:08:33

例題のSql文は、where句が式になっていないのでエラーになりますし、副問い合わせは一行しか返しません。

副問い合わせが複数行返すときは、in条件かexists条件で受け取る必要があります。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる