データベーススペシャリスト資格|2022年10月挑戦ログ 8月3日|DB基礎知識(SQLのグループ化、サブクエリ)|SQL(確認ドリル)

高度IT・基礎知識

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

知識(SQLのグループ化、サブクエリ)

グループ化について

  • group byはグループ集計を行う。
  • 穴埋め問題のコツ。「select文で指定した列名(集計関数はのぞく)は、group byですべて転記する」のが最低限の必要条件。(指定がないとエラーになるので)
  • そのうえで、問題の意図に応じて「他にも指定すべきものがないか」を確認して追加するのが十分条件。
  • 例えば、「担当社№、品№ごとに、売上合計を求める」ためには、以下のとおり記述する。
  • select 担当者№,氏名,品№,sum(数量*単価) as 売上合計
  • from 売上 group by 担当者№,氏名,品№

副問い合わせ(サブクエリ)について

  • サブクエリとは、柔軟に仮想テーブルを作成する方法。
  • たとえば「”部署”表における、フロアが”1F”の部門コード」を1列n行のサブクエリとして求め、「”社員”表において、部門コードが先のサブクエリと一致する人のすべての情報」を取得するときは、以下のような記載となる。
  • select * from 社員 where 社員.部門コード in
  • (select 部門コード from 部署 where フロア=”1F”)
  • なお、where句で「上記サブクエリに”含まれない”」と指定したいときは、not inを使う。

相関副問い合わせ(exists)について

  • サブクエリ内の“外(主クエリ)”で指定した表も参照しながら記述する方法。
  • existsとは「存在する」という意味。
  • たとえば”社員”表の社員№と、”受注”表の担当を突き合わせ、一致する”社員”表の情報を抜き出す場合、以下のように記載する。
  • select * from 社員 where exists
  • (select * from 受注 where 担当 = 社員.社員№)
  • 書き方にクセがあるので、基本構文を覚えてしまうのが良い。特徴は「whereのあと、列名を指定せずexistsと書く」「サブクエリ内のselect句は*でよい」「サブクエリ内のwhere句で、主クエリの表を利用する」などだ。
  • なお、”合致しない”逆の条件を取る場合はnot existsを使う。

問題サンプル(H30問8)(問題文)

  • “部品”表(部品番号(主キー),部品名,親部品番号)から、商品名に”N11″が含まれる部品情報(部品番号,部品名)を検索するSQL文がある。
  • このSQL文は、検索対象の部品情報のほか、対象商品に親部品番号が設定されている場合は親部品情報を返し、設定されていない場合はnullを返す。
  • FROM句で指定する内容について答えよ。

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

  • まず、WHERE句の記載は「B1.商品名 LIKE “%N11%”」となっており、これは違和感なし。
  • 次に、SELECT句の記載は「B1.部品番号,B1.部品名,B2.部品番号 AS 親部品番号,B2.部品名 AS 親部品名」となっている。
  • つまり、検索対象の”部品”表はB1で、親部品番号があればB2表を見に行きたいとわかる。この場合はJOIN句でテーブルを横につなげれば良い。
  • よってFROM句は「部品 B1 LEFT OUTER JOIN 部品 B2 ON B1.親部品番号 = B2.部品番号」となる。
  • 注意点として、LEFT OUTER JOINを使うこと。あくまで検索対象はB1表であり、親部品情報が設定されていない場合はNULLを返したいので、B1表の行はすべて残しておく必要があるから(INNER JOINだと、ON句の指定条件に合う行しか残らない)

9月22日復習時追記

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

問題085(SQL確認ドリル)

問題文

  • web_logテーブルから、デバイス別のページビュー数を求めてください。
  • 結果テーブルは「device」「pageviews」の2カラムとし、「pageviews」の降順に並べ替えて表示してください。

group by, countのおさらい

  • group byは指定した列で「束ねて分析」できる。
  • countは値の数を取得する。
  • 具体的には以下のとおり。

考察

  • データベーススペシャリスト資格について。今回は知識(SQLのグループ化とサブクエリ)の復習を行い、SQL試験問題は具体例を用いると解きやすいことを再認識した。また、SQLの確認ドリル(web_logテーブルのデバイス別のPV数)を解いた。
  • 考察。今日は妻と”自営業(副業)の固定費は、初期は極力安くする”ことを再確認した。きっかけは妻が行った美容院で、固定費の悩みを聞かされたからだ。「まずはやる」にしても、スモールスタートが無難と考えた次第だ。当たり前のことだが、こうして夫婦で認識を合わせることは大事だと思う。

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

  • I try it first. as small as possible.
  • (まずはやってみる。できるだけ小さく)

参考資料

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

コメント

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