平成21年春期 午後問3  設問4について

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
悪戦苦闘さん  
(No.1)
解答が、「ア」商品表.在庫 !=0 AND 商品表.商品名='じゃがいも'  ではいけない根拠を教えてください。
WHERE句の検索条件には、行を一意に特定する主キー(この場合、料理表.料理ID=以下省略)が入らないといけないのでしょうか?
2018.09.24 11:46
ななしさん 
(No.2)
この投稿は投稿者により削除されました。(2018.09.24 13:05)
2018.09.24 13:05
ななしさん 
(No.3)
「ア」だと、じゃがいもは大丈夫でも他の材料が在庫に無い場合に、お勧めに出てしまうという問題があります。

問題のFROM部分は、料理毎に使う材料を全部列挙します。
そのため、例えば肉じゃがに対して、
  肉じゃが じゃがいも 在庫:1 ...
  肉じゃが にんじん   在庫:0 ...
  肉じゃが 玉ねぎ     在庫:1 ...
  ...
という表が出来上がります。
ここで 商品表.在庫 !=0 AND 商品表.商品名='じゃがいも' とした場合、じゃがいもの行は条件を満たしてしまうため、にんじんの在庫が無いのに肉じゃががお勧めされてしまいます。
※じゃがいもを問題にしてて表にじゃがいもを使う料理を書いてくれないIPAはちょっといけず

従って、材料の無い料理を省く必要があります(回答群「エ」の料理表.料理ID NOT IN (~))。
2018.09.24 13:12
悪戦苦闘さん  
(No.4)
ななしさん、詳しいご投稿ありがとうございます。
ご回答いただいた中身について新たな質問ですが、商品表.在庫 !=0  で、にんじん在庫0 も有り得るのでしょうか。...ほんと、頭がかたくて申し訳ありません(^^;
2018.09.24 13:37
ななしさん 
(No.5)
SQLは基本的にFROMの内容を、WHEREの条件で選択するという流れになります。

今回の例でいえば、
  料理表
    JOIN 分量表 ON 料理表.料理ID = 分類表.料理ID
    JOIN 商品表 ON 分類表.商品ID = 商品表.商品ID
がFROMの内容です。
この時点では在庫表.在庫に関する条件は出てこないため、先に示したような在庫が0も1も含まれる表が得られます。
この表にWHEREの条件を適用するため、「ア」だと他の材料が切れていてもじゃがいもさえ在庫があればお勧めとして表示されてしまうことになります。
2018.09.24 14:46
悪戦苦闘さん  
(No.6)
ななしさん、度々申し訳ありません。
投稿(5)の下から3行目までは、理解できるのです。
「この表にWHEREの条件を適用するため~』の2行がどうも分かりません。
【商品表.在庫 !=0 AND 商品表.商品名='じゃがいも'】の部分の解釈を
【商品在庫が 0 ではなく、かつ、商品名がじゃがいも】と読んだ場合、【商品在庫が 0 ではなく】の部分は、【じゃがいもが 0 ではない】ということになるのでしょうか。
そうすれば、にんじんが 0 の場合でも、じゃがいもの在庫はあるので、肉じゃがの料理名が出てきてしまうことが分かります。
2018.09.24 15:33
ななしさん 
(No.7)
>【商品表.在庫 !=0 AND 商品表.商品名='じゃがいも'】の部分の解釈を
>【商品在庫が 0 ではなく、かつ、商品名がじゃがいも】と読んだ場合、【商品在庫が 0 ではなく】の部分は、【じゃがいもが 0 ではない】ということになるのでしょうか。

はい。
先に【商品表.在庫 != 0】があるからちょっと混乱しますが、【AND】は交換可能なので式をちょっと入れ替えて
【商品表.商品名='じゃがいも' AND 商品表.在庫 !=0】
とすると意図が見えやすくなるような気がします。
※これ書いてて掛け算のどっちを先に書くって話を思い出しました。
2018.09.24 18:09
悪戦苦闘さん  
(No.8)
ななしさん、ありがとうございました。
お陰様でスッキリしました。感謝!感謝!です。
2018.09.24 19:00

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。

その他のスレッド


Pagetop