データ操作 (全67問中20問目)
No.20
"サッカーチーム"表と"審判"表から,条件を満たす対戦を導出するSQL文のaに入れる字句はどれか。
〔条件〕
〔条件〕
- 出場チーム1のチーム名は出場チーム2のチーム名よりもアルファベット順で先にくる。
- 審判は,所属チームの対戦を担当することはできない。
出典:平成28年秋期 問29
分類
テクノロジ系 » データベース » データ操作
正解
イ
解説
まずSQL文の下記部分で3つの表の直積である中間表が生成されます。(直積表のレコード数は3×3×3=27です)
この中間表をもとに各選択肢の条件式を検証します。
SELECT A.チーム AS 出場チーム1,B.チーム AS 出場チーム2,
C.氏名 AS 審判氏名
FROM サッカーチーム AS A,サッカーチーム AS B,審判 AS C
そして中間表のレコードのうち、WHERE句の条件式C.氏名 AS 審判氏名
FROM サッカーチーム AS A,サッカーチーム AS B,審判 AS C
A.チーム名<B.チーム名
によって「出場チーム1のチーム名は出場チーム2のチーム名よりもアルファベット順で先にくる」レコードが抽出されます。アルファベット順の条件を満たすのは{X,Y} {X,Z} {Y,Z}の3つのタイプなので、これに該当する以下の9つのレコードが選択されます。この中間表をもとに各選択肢の条件式を検証します。
- 両方の条件をORで結合しているため、対戦するチーム名のいずれかが審判の所属チームと異なっているレコードが抽出されます。この条件式は次のような対戦チーム名と審判の所属チーム名が同じになるレコードに対しても真を返してしまいます。A.チーム名:X,B.チーム名:Y,所属チーム名:Xこの条件式は常に真を返すため中間表の全レコードが選択されます。
A.チーム名:X <> 所属チーム名:X → 偽
A.チーム名:Y <> 所属チーム名:X → 真
偽 OR 真 → 真 - 正しい。NOT IN句は、比較対象が値の集合に含まれない場合に真を返します。これにより中間表から所属チーム名が"A.チーム名"及び"B.チーム名"のどちらとも異なるレコードのみが選択されます。
- 親の問合せで処理中のレコードが"A.チーム名:X","Bチーム名:Y"であれば所属チームがZの行、"A.チーム名:Y","Bチーム名:Z"であれば所属チームがXの行というように、中間表に対する相関副問合せの結果は常に1行になります。EXISTSは副問合せの結果が1行以上あるときに真を返すため、中間表の全レコードが選択されます。
- "A.チーム名","B.チーム名"ともに必ず表D(審判表)に存在するため、中間表に対する副問合せの結果は常に2行になります。NOT EXISTSは副問合せの結果が存在しないときに真を返すため、選択されるレコードはありません。