平成19年春期試験問題 午前問66

T1表とT2表が,次のように定義されているとき,次のSELECT文と同じ検索結果が得られるSELECT文はどれか。

〔T1表の定義〕
CREATE TABLE T1 (SNO CHAR(6) PRIMARY KEY, SNAME CHAR(20))

〔T2表の定義〕
CREATE TABLE T2 (CODE CHAR(4), SNO CHAR(6), SURYO INT)

〔SQL文〕
SELECT DISTINCT T1.SNAME
  FROM T1, T2
  WHERE T1.SNO = T2.SNO
  ORDER BY T1.SNAME

  • 66a.png
  • 66i.png
  • 66u.png
  • 66e.png
正解 問題へ
分野:テクノロジ系
中分類:データベース
小分類:データ操作
解説
設問のCREATE TABLE文で定義される関係スキーマは以下の通りです。
  • T1(SNO,SNAME)
  • T2(CODE,SNO,SURYO)
この2つの関係に対して適用する〔SELECT文〕は、2つの関係をSNO列で結合した中間表をT1.SNAMEの昇順に整列し、T1.SNAME列だけを抜き出します(DISTINCTにより重複行は除かれます)。つまりSQL文を実行すると、T1表とT2表の両方に存在するSNOを含む行について、そのSNAMEを昇順に整列した結果が返されます。
  • 正しい。IN句のSELECT文は、T2に存在するSNOの集合を返しています。T1の各行について、その行がSNOがT2にも存在するものだけをWHERE句で絞り、それを昇順に整列しているため同じ結果が返されます。
  • IN句のSELECT文は、T1に存在するSNOの集合を返しています。このWHERE句の結果は常に真となるため、T1の全ての行が選択される(T2に存在しないSNOを含む行を排除できない)ので誤りです。
  • T1の行のうち、T2に存在しないSNOを持つ行だけが選択されます。したがって誤りです。
  • ORDER BY句で「T2.SNAME」を指定していますが、T2表にSNAMEは存在しないので構文エラーです。

Pagetop