HOME»データベーススペシャリスト掲示板»H26の午前2 問10に関して

データベーススペシャリスト掲示板

掲示板検索:

H26の午前2 問10に関して[0018]

ビギナさん(No.1)

初歩的なことかもしれませんが、H26の午前2 問10に関して質問がございます。

例として下記テーブルがあったとします。

    社員番号, 社員名, 性別, 生年月日
@  001,佐藤,男,1970年3月1日
A  002,鈴木,女,1977年8月1日
B  003,山田,男,1975年4月1日
C  002,加藤,女,1987年8月1日

この場合に問題の内容と同じSQLで最年長以外の人のタプルを取得する場合
相関副問合せの論理から考えると、副問合せは下記動きとなると思います。

●S1の1行目
・下記の行がマッチ
S1.@ 男 =  S2.@ 男
S1.@ 男 =  S2.B 男

・副問合せで得られる結果=1970年3月1日

●S1の2行目
・下記の行がマッチ
S1.A 女 =  S2.A 女
S1.A 女 =  S2.C 女

・副問合せで得られる結果=1977年8月1日

●S1の3行目
・下記の行がマッチ
S1.B 男 =  S2.@ 男
S1.B 男 =  S2.B 男

・副問合せで得られる結果=1970年3月1日

●S1の4行目
・下記の行がマッチ
S1.C 女 =  S2.A 女
S1.C 女 =  S2.C 女

・副問合せで得られる結果=1977年8月1日

これら4つの結果ごとに主問合せでのwhere句による抽出が行われると思うのですが、
疑問点がいくつかあります。

・男女関係なく1970年3月1日よりも先の生年月日が抽出されように思える
・4回抽出を行うことで値が重複してしまうように思える。

相関副問合せがわかっていないだけかと思いますが、
細かく流れをお教えいただければ幸いです。

2017.04.04 14:48
ミルキー@管理人(No.2)

相関副問合せでは、主問合せ側の行ごとに主問合せ側の値を使ったSQL文が実行されます。

●S1の1行目
・副問合せで得られる結果=1970年3月1日
・主問合せ側の生年月日=1970年3月1日
  WHERE 1970年3月1日 > 1970年3月1日 →  偽

●S1の2行目
・副問合せで得られる結果=1977年8月1日
・主問合せ側の生年月日=1977年8月1日
  WHERE 1977年8月1日 > 1977年8月1日 →  偽

●S1の3行目
・副問合せで得られる結果=1970年3月1日
・主問合せ側の生年月日=1975年4月1日
  WHERE 1975年4月1日 > 1970年3月1日 →  真

●S1の4行目
・副問合せで得られる結果=1977年8月1日
・主問合せ側の生年月日=1987年8月1日
  WHERE 1987年8月1日 > 1977年8月1日 →  真

したがって結果セットはWHERE句が真を返した以下の2つになります。
B  003,山田,男,1975年4月1日
C  002,加藤,女,1987年8月1日

2017.04.05 11:05
ビギナさん(No.3)

なるほど、一行の意味を取り違えていました。
理解しました!ありがとうございました!

2017.04.05 20:21

返信投稿用フォーム

スパム防止のために初投稿日から2カ月以上経過したスレッドへの書き込みは禁止しています。

© 2016-2020 データベーススペシャリストドットコム All Rights Reserved.

Pagetop