平成19年春期試験問題 午前問66
問66解説へ
T1表とT2表が,次のように定義されているとき,次のSELECT文と同じ検索結果が得られるSELECT文はどれか。
〔T1表の定義〕
〔T2表の定義〕
〔SQL文〕
〔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
FROM T1, T2
WHERE T1.SNO = T2.SNO
ORDER BY T1.SNAME
広告
解説
設問のCREATE TABLE文で定義される関係スキーマは以下の通りです。
- T1(SNO,SNAME)
- T2(CODE,SNO,SURYO)
- 正しい。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は存在しないので構文エラーです。
広告