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

高度IT・基礎知識

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

また、考察においてキャリアコンサルタント資格の挑戦ログについても記述する。

知識(SQL午前試験問題)

通番は「2022年度版 ALL IN ONE パーフェクトマスター データベーススペシャリスト/TAC」のSQLに関するページの問題編の問№

  1. 階層構造をもつ表(部品番号、部品名、親部品番号)に関する設問。その表について親部品番号が存在すればその部品名、なければnullを設定したいときのSQLについて。ポイントはleft outer joinを使って左側を全て残すこと。でないと親部品番号が存在しないときのデータが抽出できないので。いずれにせよ、しっかり問題文を読み合致するものを選ぶことが大事。(H30問8)
  2. 縦型の表(社員コード、資格)を横型(社員コード、資格1、資格2)に成形する設問。元の表と、元の表のコピーをleft outer joinして、同一社員コードについての全ての組み合わせを求めておき、ここからwhereで絞り込む。この、「同じ表をjoinして、同じ番号の全ての組み合わせを求める」はよく午前試験で問われるので、感覚として理解しておきたい。(R3問8)
  3. 社員表から男女それぞれの最年長社員のみ除いて抽出を実現する問題。かなり面白い。where句で元表.生年月日>(サブクエリ)とし、サブクエリ内でmin(生年月日)where 元表.性別=参照表.性別と定義。こうすると、たとえば元表のR2年生まれ男性の行であれば、同じ男性についての最年長を取得したものと比較し、残る(抽出される)…とわかる。元表の上のデータから順に処理されるイメージを持つと良さそう。(R2問10)
  4. 相関副問い合わせを利用し、上位3つを絞り込む問題。落ち着いて、上から順に条件判定していくイメージを持つと良い。(H26問16)
  5. case when x else x end(ifと同じ)およびcountを用いて、条件に合致するものの数を数える問題。countはnull以外はすべて数えるので、条件合致したときは有意な数(たとえば1や2)、条件合致しないときはnullを指定するのがポイント。(H29問8)
  6. where句とgroup by・havingを用いて「2014年度に、平均点が600点以上だったクラス」を求める問題。絞り込みの仕方について実際にSQLをイメージできれば解ける(H27問8)
  7. “会計取引の仕分け”とかなり難しそうな問題だが、選択肢を見ると”残高”と存在しない列を抽出しているものが2つもあるので×と分かる。また、金額の合計値のみか、それに期首残高を加味したものかの二択なので、題意をふまえ後者とわかる。このように「SQLの文法上おかしい」「題意に合ってない」である程度絞り込めるものもある。(H29問2)
  8. 相関副問い合わせを利用し、上司として設定されていない社員を絞り込む問題。not exitstsではあるが、基本は同じ。上から順に条件判定されるイメージで。(R2問8)
  9. サブクエリを主クエリのwhere条件内に用いる問題。joinやunionなどの「イメージ」を知っていれば消去法で解ける。(H28問9)
  10. カーソルで示された行の指定された列を更新する構文について。「set 列名=値,…where current of カーソル名」となる。これは覚えればOK(H30問6)
  11. 少し歯ごたえがある。「同じ表をjoinして、同じ番号の全ての組み合わせを求める」にくわえ、観測されなかった野鳥のデータを挿入する問題。とはいえ、前者の表から「表1.通番,表2.鳥名」と求めてるので、サブクエリ内でもこれが比較対象になるだろうと予測はできる。(H27問11)
  12. 表作成時のユニーク制約について。表名、列名とデータ型×nのあとに指定。「ユニーク制約により、指定した列や列の組み合わせにつき、同じ値を格納できないようにできる」点がポイント。(H30問7)
  13. 1台のPCに2つのスロットがあり、各スロットに1つずつメモリーカードを挿入する場合の、取り付け状態を管理する表の主キーに関する問題。具体例を書けば分かるが、PCIDとスロット番号で行は特定できるので主キーはこれとわかる。また、メモリーカード側から見て「1つのカードに対して、差し込めるスロットは0か1」とあるので、同じカード番号のものを複数スロットに入れることはできないと分かるので、ユニーク制約を課す…。つまり多重度やユニーク制約の複合問題で面白い。(H29問11)
  14. BLOB型とは、大量のバイナリデータを格納できる方法であること。昨今のビッグデータはRDBでなく、このようにシンプルかつ大量に格納するケースが多い。(H30問11)
  15. ビュー生成のうえ、これを参照する問題。とはいえ生成・参照いずれもシンプルな内容。(H29問10)
  16. 更新可能なビューの条件に関する問題。「distinct, group byを用いない」「fromで複数表を指定しない」「unionを用いない」など、要は単一表を用いた簡単な参照だと理解しておけば良い。(H28問10)
  17. 導出表に関する問題。いわゆる仮想テーブルであり、サブクエリ・ビュー・with句が使える。「ビューは導出表のひとつである」とあるのでこれが正解。要は「導出表とは、仮想テーブルのことである」と覚えておけば良い。(H30問12)

9月22日復習時追記

  • 前述のとおり、SQLについては午前・午後ともに対策済。
  • 午前は、TACテキスト・三好先生テキスト(SQLの章)・過去5年分を確認済。
  • 午後については「SQL問題」として過去問ベースで確認済。

問題094(SQL確認ドリル)

問題文

  • salesテーブルに記録されている販売金額(revenue)が税抜だったとします。テーブル全体のrevenueが税込でいくらになるか求めてください。
  • 消費税率は、2019年10月1日以前は8%、以降は10%とします。
  • カラム名は「revenue_with_tax」とします。

ifのおさらい

  • ifは条件式、真の挙動、偽の挙動と記述できる。
  • 今回は、date_time>2019-08-01が真ならrevenue*1.08にし、偽ならrevenue*1.10として、その合計値を求めればよい。
  • なお、別解として消費税8%の計算と10%の計算を別々に行い、あとから合算する方法もある。
  • 具体的には以下のとおり。

考察

  • データベーススペシャリスト資格について。今回は知識(SQL午前試験問題)として過去問を解き、解き方と要点を再認識した。また、SQLの確認ドリル(salesテーブルにおいて税込の販売額合計を求める。なお2019年10月1日以前は税率8%、以降は10%とする)を解いた。
  • 考察。キャリアコンサルタント資格について、学習を始めて良かったと思える点が2つある。一つは「より良い人生のデザイン」について深く学べる事だ。もう一つは、先生や家族から「自分ならではの強み」を教えてもらえる事だ。今日は妻から「あなたの誠実さと、プラス思考は良い」と言ってもらえた。

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

  • own strength is unconscious. So seeing it from oneself is difficult.
  • (自分の強みは無意識的。だからそれを自分から見るのは難しい)

参考資料

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

コメント

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