平成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)

[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

  • 「SELECT DISTINCT T1.SNAME」は、SELECT文を実行した結果、同じデータ(T1.SNAME)が複数ある場合に重複データを出力しないという意味です。
  • 「FROM T1, T2」は、T1とT2の表からという意味です。
  • 「WHERE T1.SNO=T2.SNO」は、T1とT2で同じSNOを持ったデータを抜き出すという意味です。
  • 「ORDER BY T1.SNAME」は、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文

キーワードの解説
  • SELECT文
    SQL言語の中のステートメントで、1つ以上の表から条件にあったデータを取り出すときに使用します。
    • DISTINCTは、重複データを出力しない
    • WHEREは、元となる表の指定
    • ORDERは、結果をソート
    意味になります。

もっと、「SELECT文」について調べてみよう。

戻る 一覧へ 次へ