HOME»応用情報技術者試験掲示板»令和元年秋期 午後問6(データベース)  問題g
投稿する

[3854] 令和元年秋期 午後問6(データベース)  問題g

 未熟者さん(No.1) 
初めまして。令和元年秋期 午後問6(データベース)  問題gについてご教授いただきたいです。。
問題gが含まれているSQLでは、大元のWHERE句でレポート年月しか見ていない割に、副問合せの中では従業員コードを絞っているので、1人の従業員のデータ(月間総歩数)が他の従業員のデータ(月間総歩数)を更新してしまうことって起きないですか。。?

ご教授お願いします。。
2022.11.06 17:54
AP受かりたいマンさん(No.2) 
相関副問い合わせは結構理解するのが大変なので図3の処理の順番を書いていきますね。
まずUPDATEに書かれている表名とWHERE句で更新対象の表が
月次レポートの中の対象年月のレコードになるのはご理解されてると思います。
次は対象を絞った月次レポートのレコードを1行ずつ
相関副問い合わせでアップデートしていきます。

例えば従業員番号001のレコードを更新する場合、
副問い合わせは従業員番号001で測定日が対象年月日の歩数を返し、
月次レポートの従業員番号が001のレコードが更新されます。
その次の月次レポートのレコードの従業員番号が002の場合、
副問い合わせは従業員番号002で測定日が対象年月日の歩数を返し、
月次レポートの従業員番号が002のレコードが更新されます。

回答gに書かれている歩数.従業員番号 = 月次レポート.従業員番号の
月次レポート.従業員番号は更新の対象となるレコード毎に変化していきます。
これで一人の従業員の歩数で全員分の月次レポートが
更新されない事が伝わればいいのですが。
2022.11.07 20:45
 未熟者さん(No.3) 
AP受かりたいマンさん、ご説明ありがとうございます!!。
副問合せの中で、歩数.従業員番号 = 月次レポート.従業員番号  とやっているので、歩数テーブルと月次レポートテーブルの紐づけがされているため、大元のWHEREで従業員を絞る必要性がない。と解釈したのですが、あってますか。。。?

あと、一つ疑問なのですが仮に、大元のWHERE句にも「歩数.従業員番号 = 月次レポート.従業員番号」を付けた場合ってどうなりますか。。?
すみませんがご教授お願い致します。
2022.11.07 22:36
AP受かりたいマンさん(No.4) 
>大元のWHEREで従業員を絞る必要性がない。と解釈したのですが、あってますか。。。?
大元のWHEREを外した場合、例えば従業員番号001のレコードを更新する際
別のレポート年月の従業員番号001の月次レポートも上書きされてしまいます。
大元のWHERE句がない場合、全ての月次レポートが更新対象になるからです。
相関副問い合わせはあくまで更新対象のレコードの従業員の
対象レポート年月の歩数の合計を求めているだけであり
更新対象を限定しているわけではありません。

また、更新対象の表は月次レポート単体で構成されており
歩数.従業員番号 = 月次レポート.従業員番号を追記した場合エラーが発生します。
2022.11.07 23:57
 未熟者さん(No.5) 
AP受かりたいマンさん、お早いお返事ありがとうございます。

相関副問い合わせ  というものを自分はあまり存じ上げていませんでしたので、AP受かりたいマンさんのご説明と、ネットの記事を用いて改めて問題のsqlを見て、考えてみました。
AP受かりたいマンさんが、最初におっしゃられていた
"次は対象を絞った月次レポートのレコードを1行ずつ
相関副問い合わせでアップデートしていきます。"
の「1行ずつ」というのがキーワードのように感じました。

自分の解釈を上手いこと言語化するのが難しいのですが、UPDATEのWHERE句で絞られたレコード1行ずつ副問合せして、更新させるデータを得る。といったことであっているでしょうか。。?
自分の日本語力が皆無で申し訳ないです。。
2022.11.08 00:11
AP受かりたいマンさん(No.6) 
>、UPDATEのWHERE句で絞られたレコード1行ずつ副問合せして、更新させるデータを得る。といったことであっているでしょうか。。?
その認識で合っていると思います。
自分もDBを勉強して最初の頃は混乱してなかなか相関副問い合わせの
処理の順番を理解出来なかったのを思い出します。
2022.11.08 00:14
 未熟者さん(No.7) 
AP受かりたいマンさん。
自分の理解度が低いため何度もご回答していただきありがとうございます!。
AP受かりたいマンさんのおかげで、わからなかったところが理解できました!ありがとうございます!
2022.11.08 00:47

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。
© 2010-2024 応用情報技術者試験ドットコム All Rights Reserved.

Pagetop