データベーススペシャリスト試験攻略のツボ(9)

「SQL文を選択する」問題

西沢直木
2009/1/26

 本連載では、テクニカルエンジニア(データベース)試験に対応できる知識を確認していきます。多岐にわたる知識が問われる試験ですので、受験する方はもちろん、日常業務ではあまり使うことのない技術知識の確認にも役立ててください。
目次
今回の出題範囲
17年-午前問題-問38/19年-午前問題-問35/19年-午前問題-問34








問9-3 問題文と同じ結果になるSQL文を選択

 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 DISTINCT 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

(19年-午前問題-問34)

答え

解説

 問題文のSELECT文はT1、T2をSNO列で結合しています。結果として、T1、T2の両方に含まれるデータについて、昇順にソートされたT1のSNAME列の重複を取り除いた値が返されます。これと同じ結果になるSELECT文を選択肢から探します。

 選択肢「ア」は、IN句のSELECT文でT2の全データを取得しており、その結果を基にT1からSNAME列を取得しているので、問題文と同じように、両方の表に含まれるデータが返されます。また、ORDER BY句の条件や、DISTINCT句でSNAME列の重複を削除している点も問題文と同じなので、結果は問題文と同じになります。従って、この選択肢「ア」が正解です。

 選択肢「イ」は、重複を削除したSNAME列を返しますが、T2のデータが結合されていないので、問題文とは結果が異なります。

 選択肢「ウ」は、NOT IN句を使用しており、T2に含まれないデータが返されるので、問題文のSELECT文とは結果が異なります。

 選択肢「エ」は、T2にはSNAME列がないので、ORDER BY句の指定がエラーになります。

筆者プロフィール:西沢 直木(にしざわ なおき)

フリーランスでWebアプリケーションの開発、コンピュータ書籍の執筆および翻訳に従事。データベース、プログラミング言語、サーバ関連から数学の話題までにかかわる。テクニカルエンジニア(データベース)保有。

主な著書および翻訳書


前のページへ 3/3  

Index
データベーススペシャリスト試験攻略のツボ(9)
「SQL文を選択する」問題
問9-1 問題文の条件を満たすSQL文を選択
問9-2 サブクエリに当てはまるSQL文を選択
問9-3 問題文と同じ結果になるSQL文を選択


データベーススペシャリスト試験攻略のツボ




Database Expert フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Database Expert 記事ランキング

本日月間