DBデータベーススペシャリスト試験 午前Ⅱ

令和2年度10月 データベーススペシャリスト 午前Ⅱ 問7

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

表Rと表Sに対し,SQL文を実行して結果を得るとき,aに入れる字句はどれか。ここで,結果のNULLは値が存在しないことを表す。
IDと名称1から成る表R,IDと名称2から成る表S,FULL JOIN後の結果表,及びaを含むSELECT文。
IDと名称1から成る表R,IDと名称2から成る表S,FULL JOIN後の結果表,及びaを含むSELECT文。

選択肢

  1. ア
    COALESCE
  2. イ
    DISTINCT
  3. ウ
    NULLIF
  4. エ
    UNIQUE
解き方のヒントを見る

SQL抽出条件を読むための確認視点

SQLの抽出条件と結果の対応を考えるときは、文の各部分がどの行や値に影響するかを順に整理し、条件同士の関係と適用される段階を区別して丁寧に確認しましょう。

この問題で問われていること

一つの確認事項として、抽出条件がデータのどの単位に作用し、複数の条件がある場合にそれぞれの関係をどう読み取るかへ意識を向けてください。

視点

SQL文を読む際は、対象となるデータ、条件のまとまり、条件が評価される位置を分けて捉えます。個々の記述を単独で見るだけでなく、全体の構造との関係を整理すると、結果を検討するための視点を保ちやすくなります。

確認ポイント

  • 条件がどのデータ単位に関係するかを確認する
  • 複数の条件のつながりを構造として整理する
  • 各条件が評価される位置を区別して読む
正解と解説を見る

正解

ア

解説

FULL JOINは一致する行だけでなく、RまたはSの片方にだけ存在する行も結果に含める。そのため、片側のIDがNULLになる行では、NULLでない方のIDを表示する処理が必要です。

理由

RとSをIDでFULL JOINすると、ID 2と3は一致して両方の名称が表示される。一方、RだけにあるID 1ではS.IDがNULL、SだけにあるID 4ではR.IDがNULLになる。表示用IDには存在する側の値が必要です。

比較

COALESCEは引数を左から調べ、NULLでない最初の値を返す。したがってCOALESCE(R.ID、 S.ID)なら、ID 1ではR.ID、ID 4ではS.ID、ID 2と3では一致したIDが表示され、公式画像の結果と一致する。

選択肢ア(正解)

これは正解だよ。COALESCE(R.ID, S.ID)は、R.IDがNULLでなければその値を、NULLならS.IDを返す。FULL JOINで片側にしか存在しないID 1とID 4でも、存在する側のIDを表示でき、結果表の1〜4と一致する。

選択肢イ

これは不正解だよ。DISTINCTは重複する行や値を重ねて表示しないための指定であり、NULLになったR.IDまたはS.IDを別の列の値で補う機能はない。この設問の表示用IDを1〜4にする処理には該当しない。

選択肢ウ

これは不正解だよ。NULLIFは二つの値を比較し、一致した場合にNULLを返す関数である。片側のIDがNULLになるFULL JOINの結果に対して、NULLでない側のIDを選んで表示する処理とは目的が異なる。

選択肢エ

これは不正解だよ。UNIQUEはSQLで値の重複を制約するために使われる語で、SELECT句でNULLになった列を別の列の値に置き換える関数ではない。したがって表示用のIDを補うことはできない。

学習のポイント

FULL JOINにおけるNULL補完と、複数引数からNULLでない値を選ぶ処理を学ぶ。

出典:独立行政法人 情報処理推進機構(IPA)令和2年度10月 データベーススペシャリスト試験 午前Ⅱ 問7(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針