応用情報技術者平成28年秋期 午前問29

問29

"サッカーチーム"表と"審判"表から,条件を満たす対戦を導出するSQL文のaに入れる字句はどれか。

〔条件〕
  • 出場チーム1のチーム名は出場チーム2のチーム名よりもアルファベット順で先にくる。
  • 審判は,所属チームの対戦を担当することはできない。
29.gif/image-size:399×363
  • 29a.gif/image-size:410×13
  • 29i.gif/image-size:410×14
  • 29u.gif/image-size:410×50
  • 29e.gif/image-size:410×49

分類

テクノロジ系 » データベース » データ操作

正解

解説

まずSQL文の下記部分で3つの表の直積である中間表が生成されます。(直積表のレコード数は3×3×3=27です)
SELECT A.チーム名前出場チーム1,B.チーム名前出場チーム2,
 C.氏名 AS 審判氏名
 FROM サッカーチーム AS A,サッカーチーム AS B,審判 AS C
そして中間表のレコードのうち、WHERE句の条件式
A.チーム名<B.チーム名
によって「出場チーム1のチーム名は出場チーム2のチーム名よりもアルファベット順で先にくる」レコードが抽出されます。アルファベット順の条件を満たすのは{X,Y} {X,Z} {Y,Z}の3つのタイプなので、これに該当する以下の9つのレコードが選択されます。
29_1.gif/image-size:337×178
この中間表をもとに各選択肢の条件式を検証します。
  • 両方の条件をORで結合しているため、対戦するチーム名のいずれかが審判の所属チームと異なっているレコードが抽出されます。この条件式は次のような対戦チーム名と審判の所属チーム名が同じになるレコードに対しても真を返してしまいます。
    A.チーム名:X,B.チーム名:Y,所属チーム名:X
    A.チーム名:X <> 所属チーム名:X → 偽
    A.チーム名:Y <> 所属チーム名:X → 真
    偽 OR 真 → 真
    この条件式は常に真を返すため中間表の全レコードが選択されます。
  • 正しい。NOT IN句は、比較対象が値の集合に含まれない場合に真を返します。これにより中間表から所属チーム名が"A.チーム名"及び"B.チーム名"のどちらとも異なるレコードのみが選択されます。
    29_2.gif/image-size:337×178
  • 親の問合せで処理中のレコードが"A.チーム名:X","Bチーム名:Y"であれば所属チームがZの行、"A.チーム名:Y","Bチーム名:Z"であれば所属チームがXの行というように、中間表に対する相関副問合せの結果は常に1行になります。EXISTSは副問合せの結果が1行以上あるときに真を返すため、中間表の全レコードが選択されます。
  • "A.チーム名","B.チーム名"ともに必ず表D(審判表)に存在するため、中間表に対する副問合せの結果は常に2行になります。NOT EXISTSは副問合せの結果が存在しないときに真を返すため、選択されるレコードはありません。
© 2010-2024 応用情報技術者試験ドットコム All Rights Reserved.

Pagetop