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)
[SELECT文]
SELECT DISTINCT T1.SNAME
FROM T1, T2
WHERE T1.SNO=T2.SNO
ORDER BY T1.SNAME
ア | SELECT DISTINCT SNAME FROM T1 WHERE SNO IN (SELECT SNO FROM T2) ORDER BY SNAME |
イ | SELECT DISTINCT SNAME FROM T1 WHERE T1.SNO IN (SELECT SNO FROM T1) ORDER BY SNAME |
ウ | SELECT SNAME FROM T1 WHERE SNO NOT IN (SELECT SNO FROM T2) ORDER BY SNAME |
エ | SELECT T2.SNAME FROM T1, T2 WHERE T1.SNO=T2.SNO ORDER BY T2.SNAME |
答え ア
【解説】
問題のSQL文について
SELECT DISTINCT T1.SNAME
FROM T1, T2
WHERE T1.SNO=T2.SNO
ORDER BY T1.SNAME
は
ア | これの結果は問題文と同じになります。 「WHERE SNO IN (SELECT SNO FROM T2)」は、T2のSNOの中にもある、T1のSNOを取り出すという意味で、「WHERE T1.SNO=T2.SNO」と同じです。 |
イ | 「WHERE T1.SNO IN (SELECT SNO FROM T1)」は、T1のすべてのデータを出力することを意味します。 |
ウ | 「SELECT SNAME」は実行した結果、同じSNAMEが複数あった場合、重複したデータを出力します。 |
エ | 「SELECT SNAME」は実行した結果、同じSNAMEが複数あった場合、重複したデータを出力します。 また、「WHERE T1.SNO IN (SELECT SNO FROM T1)」は、T1のすべてのデータを出力することを意味します。 |
【キーワード】
・SELECT文