データベーススペシャリスト資格|2022年10月挑戦ログ 8月4日|DB基礎知識(SQLの問題例)|SQL(確認ドリル)

高度IT・基礎知識

この記事は「データベーススペシャリスト資格に興味はあるが、どのようなものか?どう学ぶのか?」という方向けに、具体的な内容と私自身の挑戦ログをお伝えする。学び中の方や、これから学ぼうとされる方の参考になれば幸いだ。今回は知識およびSQL(確認ドリル)について書く。(SQLはGoogle Big Queryに準拠)

知識(SQLの午前問題例)

SQLの午前問題のポイント

  • ここに記すのはあくまでサンプルであり、過去問ベースにselect句について一通りは解けるようにしておく必要がある。

問題サンプル(H26問16)(問題の要旨)

  • “商品月間販売実績”表(商品コード、総販売数)について。例えば「S001,150」「S004,400」「S005,400」「S006,500」と4つのレコード(行)があるとする。
  • SQLを以下のとおり記述したとき、抽出されないレコードはどれか。
  • select A.商品コード as 商品コード,A.総販売数 as 総販売数
  • from 商品月間販売実績 A
  • where 3 > (select count(*) from 商品月間販売実績 B where A.総販売数 < B.総販売数)

問題サンプル(H26問16)(回答)

  • この問題は相関副問い合わせ。
  • まず、カッコ内のwhere句を見ると、selectで求めるA表の総販売数と、比較用のB表の総販売数を比べ、カウントしているのがわかる。
  • そして、カッコ外のwhere句を見ると、カウントの結果が3未満のとき抽出すると読める。
  • よって、「S001,150」は唯一、カウント数が”3″なので抽出対象外となる。

問題サンプル(H29問8)(問題の要旨)

  • “社員”表(社員コード、部署コード、社員名、役職)について、部署コードごとの主任の人数と一般社員の人数を求める。
  • select 部署コード
  • count(case when 役職 = “主任” 【 】end ) as 主任の人数,
  • count(case when 役職 = “一般社員” 【 】end ) as 一般社員の人数
  • from 社員 group by 部署コード

問題サンプル(H29問8)(回答)

  • まずcaseだが、「case when 条件 then 真の戻り値 else 偽の戻り値」のように用いる。エクセルのIF関数のような形。
  • 次にcountだが、これはnull以外の値をカウントする。
  • よって、【】内は「then 1 else null」が正解とわかる。
  • 偽の戻り値はnullにして、count対象とされないようにするのがポイント。

知識(SQLの午後問題例)

SQLの午後問題のポイント

  • 本文とSQLの一部が記載されているので、本文をよく読んで”何をしたいのか”把握し、適切にSQLを埋める
  • なお、今回は必要な部分がピンポイントで書いてあるので即答できるが、本番では至る所に散りばめられているので、回答に必要な部分を探し出す必要がある。
  • とはいえ、SQLの基本的な構文は把握しておく必要がある。
  • たとえば以下の事例であれば、出庫年月日”ごと”という表記から”group by”、”集計する”という表記から”sum”、”全くない部品も”という表記から”outer join”とアテがつかなければいけない。

問題サンプル(H29問2のSQL1)(問題の要旨)

  • SQL1は各部品の出庫年月日ごとの出庫数量を集計する。また、SQL1では、出庫が全くない部品も集計対象とする。
  • SQL1の記述は以下のとおり。【】内に入る記述を答えよ。
  • なお、出庫表は出庫番号を主キーとし、”部品番号”,”出庫年月日”,”出庫数量”等を持つものとする。
  • select B.部品番号,S.出庫年月日,【a】
  • from 在庫 as B 【b】出庫 as S
  • on B.倉庫コード = S.出庫元倉庫コード and B.部品番号 = S.部品番号 and S.出庫年月日>”2016-04-01″ and S.出庫年月日 < “2017-04-01”
  • 【c】

問題サンプル(H29問2のSQL1)(回答)

  • まず【c】だが、本文でやりたいことが「各部品の出庫年月日ごとの出庫数量を集計」と読み取れ、select文で部品番号と出庫年月日を指定しているので、「group by B.部品番号,S.出庫年月日」とわかる。なお、表の相関名(BやS)で必ず書くこと。
  • 次に【a】だが、出庫数量を集計とあるので、「sum(S.出庫数量)」とわかる。
  • 最後に【b】だが、「出庫が全くない部品も集計対象とする」とあるので、B表のデータは全て残す必要がある。よって「left outer join」とわかる。

9月22日復習時追記

  • SQLは、午前2では頻出問題。TACテキストおよび過去5年分解いており、対策済。
  • また、SQLの全般的な構文は、三好先生のSQLページでも確認済。
  • 午後については「SQL問題」として過去問ベースで確認しており、対策済。

問題086(SQL確認ドリル)

問題文

  • customersテーブルに都道府県(prefecture)が「東京」以外の顧客は何人いるか調べてください。
  • 結果テーブルのカラム名は「users」とします。

count(distinct 列名),whereのおさらい

  • count(distinct 列名)は指定した列のユニークな値の数を取得できる。
  • whereは条件の絞り込みを行う。今回は”以外”なので”!=”を用いる。
  • 具体的には以下のとおり。

考察

  • データベーススペシャリスト資格について。今回は知識(SQLの試験問題例)の復習を行い、回答の方法や注意点を学習した。また、SQLの確認ドリル(customersテーブルで都道府県が東京以外の顧客の人数)を解いた。
  • 考察。何か新しいことを始めるときは「学び、練習して、内省する」サイクルが重要だと思う。このうち内省とは、問題点を発見したり指摘してもらい、次に活かすことだ。たとえば車の運転であればはじめは慎重だが、慣れてくると思い込みや慢心が生まれやすい。そこで同乗者に意見をもらうなどだ。

考察のシンプル化と英訳(練習中)

  • Study, Practice, Introspection. I think this “SPI” is important with new challenge.
  • (勉強、実践、内省。この「SPI」は新しい挑戦において重要だと思います)

参考資料

  • 集中演習 SQL入門/木田和廣/株式会社インプレス
  • 2022年度版 ALL IN ONE パーフェクトマスター データベーススペシャリスト/TAC

コメント

タイトルとURLをコピーしました