データベーススペシャリスト 平成26年春期 午前U 問16

午前U 問16

"商品月間販売実績"表に対して,SQL文を実行して得られる結果はどれか。
16_1.gif/image-size:237×183
16_2.gif/image-size:389×94

分類

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

正解

解説

このSQL文では副問合せ中に主問合せ側のA表の総販売数量の値が使用されているため相関副問合せになります。相関副問合せでは主問合せ側の1行ごとに副問合せのSQL文が実行されていくため、以下の手順で処理されていくと考えることができます。

まず1行目から考えていきます。副問合せの「A.総販売数」の部分には、現在処理中の1行目の総販売数の値である150が代入されます。
SELECT COUNT(*) 商品月間販売実績 B
 WHERE 150 < B.総販売数
"商品月間販売実績"表のうち総販売数の値が150より大きい行は4つです。COUNT(*)は条件に合致した行数を返す集計関数なので副問合せの結果は"4"になります。これによって主問合せ側のWHERE句の条件式は「WHERE 3 > 4」となり、偽と判定されます。したがって1行目は抽出対象になりません。

次に2行目を考えます。副問合せの「A.総販売数」の部分には、現在処理中の2行目の総販売数の値である250が代入されます。
SELECT COUNT(*) 商品月間販売実績 B
 WHERE 250 < B.総販売数
"商品月間販売実績"表のうち総販売数の値が250より大きい行は3つなので、副問合せの結果は"3"になります。これによって主問合せ側のWHERE句の条件式は「WHERE 3 > 3」となり、偽と判定されます。したがって2行目も抽出対象になりません。

このように続けていくと、下図のように総販売数が400又は500の行だけが(WHWRE 3 > ...)の条件を満たす結果を返します。したがってSQL文の実行結果は、総販売数が400および500である3行で構成される表から、商品コード列と総販売数列を抜き出したものになります。
16_3.gif/image-size:447×434
以上より「ウ」が適切な実行結果です。
© 2016-2019 データベーススペシャリストドットコム All Rights Reserved.

Pagetop