平成28年秋午前問29
広告
そぼろ丼さん
(No.1)
https://www.ap-siken.com/s/kakomon/28_aki/q29.html
ウじゃない理由がよく分かりません、
解説の「全レコード選択される」が余計分かりません、
教えていただけますでしょうか。
ウじゃない理由がよく分かりません、
解説の「全レコード選択される」が余計分かりません、
教えていただけますでしょうか。
2023.06.15 07:34
jjon-comさん
★AP プラチナマイスター
(No.2)
解答群ウの,入れ子になっている内側の次のSQLは
(SELECT * FROM 審判 AS D
WHERE A.チーム名 <> D.所属チーム名 AND B.チーム名 <> D.所属チーム名)
この部分だけ独立で実行することはできない。
内側のFROM句に指定されているのはD表だけでありA表もB表も登場していないから。
つまり,これは相関副問合せになっており,
(1) 外側のSQLの結果(解説文では中間表と呼んでいる)を一行ずつ
(2) 内側のSQLに適用して結果を得る
とイメージする。
(DBソフトウェアが本当にそう実装されているかどうかは不問)
解説文にあるとおり,中間表は次の9行であり,
X, Y, 佐藤健太, X
X, Y, 鈴木翔太, Y
X, Y, 高橋拓也, Z
X, Z, 佐藤健太, X
X, Z, 鈴木翔太, Y
X, Z, 高橋拓也, Z
Y, Z, 佐藤健太, X
Y, Z, 鈴木翔太, Y
Y, Z, 高橋拓也, Z
この各行に解答群ウのSQLを適用したときの結果は,次の「…の右側」のようになる。
X, Y, 佐藤健太, X …(高橋拓也, Z)
X, Y, 鈴木翔太, Y …(高橋拓也, Z)
X, Y, 高橋拓也, Z …(高橋拓也, Z)
X, Z, 佐藤健太, X …(鈴木翔太, Y)
X, Z, 鈴木翔太, Y …(鈴木翔太, Y)
X, Z, 高橋拓也, Z …(鈴木翔太, Y)
Y, Z, 佐藤健太, X …(佐藤健太, X)
Y, Z, 鈴木翔太, Y …(佐藤健太, X)
Y, Z, 高橋拓也, Z …(佐藤健太, X)
外側のSQLの FROM 審判 AS C すなわちC表と
内側のSQLの FROM 審判 AS D すなわちD表とが
別物だという分かっていない場合は,
中間表から C.氏名 と C.所属チーム名 を外して
(C表は 解答群ウの内側のSQLに登場しないので)
次のように書いた方が理解しやすいだろう。
X, Y …(高橋拓也, Z)
X, Y …(高橋拓也, Z)
X, Y …(高橋拓也, Z)
X, Z …(鈴木翔太, Y)
X, Z …(鈴木翔太, Y)
X, Z …(鈴木翔太, Y)
Y, Z …(佐藤健太, X)
Y, Z …(佐藤健太, X)
Y, Z …(佐藤健太, X)
以上より。
中間表の9行いずれに対して解答群ウを適用しても,
結果はすべて「出力結果は存在する EXISTS」(=全レコード選択される)。
よって,解答群ウを空欄aに当てはめた場合,中間表の9行が出力される。
(SELECT * FROM 審判 AS D
WHERE A.チーム名 <> D.所属チーム名 AND B.チーム名 <> D.所属チーム名)
この部分だけ独立で実行することはできない。
内側のFROM句に指定されているのはD表だけでありA表もB表も登場していないから。
つまり,これは相関副問合せになっており,
(1) 外側のSQLの結果(解説文では中間表と呼んでいる)を一行ずつ
(2) 内側のSQLに適用して結果を得る
とイメージする。
(DBソフトウェアが本当にそう実装されているかどうかは不問)
解説文にあるとおり,中間表は次の9行であり,
X, Y, 佐藤健太, X
X, Y, 鈴木翔太, Y
X, Y, 高橋拓也, Z
X, Z, 佐藤健太, X
X, Z, 鈴木翔太, Y
X, Z, 高橋拓也, Z
Y, Z, 佐藤健太, X
Y, Z, 鈴木翔太, Y
Y, Z, 高橋拓也, Z
この各行に解答群ウのSQLを適用したときの結果は,次の「…の右側」のようになる。
X, Y, 佐藤健太, X …(高橋拓也, Z)
X, Y, 鈴木翔太, Y …(高橋拓也, Z)
X, Y, 高橋拓也, Z …(高橋拓也, Z)
X, Z, 佐藤健太, X …(鈴木翔太, Y)
X, Z, 鈴木翔太, Y …(鈴木翔太, Y)
X, Z, 高橋拓也, Z …(鈴木翔太, Y)
Y, Z, 佐藤健太, X …(佐藤健太, X)
Y, Z, 鈴木翔太, Y …(佐藤健太, X)
Y, Z, 高橋拓也, Z …(佐藤健太, X)
外側のSQLの FROM 審判 AS C すなわちC表と
内側のSQLの FROM 審判 AS D すなわちD表とが
別物だという分かっていない場合は,
中間表から C.氏名 と C.所属チーム名 を外して
(C表は 解答群ウの内側のSQLに登場しないので)
次のように書いた方が理解しやすいだろう。
X, Y …(高橋拓也, Z)
X, Y …(高橋拓也, Z)
X, Y …(高橋拓也, Z)
X, Z …(鈴木翔太, Y)
X, Z …(鈴木翔太, Y)
X, Z …(鈴木翔太, Y)
Y, Z …(佐藤健太, X)
Y, Z …(佐藤健太, X)
Y, Z …(佐藤健太, X)
以上より。
中間表の9行いずれに対して解答群ウを適用しても,
結果はすべて「出力結果は存在する EXISTS」(=全レコード選択される)。
よって,解答群ウを空欄aに当てはめた場合,中間表の9行が出力される。
2023.06.15 15:56
そぼろ丼さん
(No.3)
理解できました。大変ありがとうございました。
2023.06.15 22:07
広告
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
広告