この記事は「データベーススペシャリスト資格に興味はあるが、どのようなものか?どう学ぶのか?」という方向けに、具体的な内容と私自身の挑戦ログをお伝えする。学び中の方や、これから学ぼうとされる方の参考になれば幸いだ。今回は知識および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
コメント