この記事は「データベーススペシャリスト資格に興味はあるが、どのようなものか?どう学ぶのか?」という方向けに、具体的な内容と私自身の挑戦ログをお伝えする。学び中の方や、これから学ぼうとされる方の参考になれば幸いだ。
今回はSQLによるテーブルの結合(2/3)について書く。
※注意点として、SQLはDBMSによって作法が異なる。この記事はGoogle Big Queryに準拠するものであることをお含みおき願いたい。
複数条件の結合
前回振り返り
- 今までは単一テーブルの操作を学習。これから複数テーブルの操作を学ぶ。これは、実務では「扱いやすさ」の観点から複数テーブルに分かれているが、分析においては「幅広く見る」ためにテーブルをつなげる必要があるから。
- SQLにおいては「異なる性質(列)で分けたデータ」を、“横”につなげる操作を「結合(join)」と言う。
- また、「一定期間ごとに集計されたレコード(行)」を、“縦”につなげる操作を「集合演算(union)」と言う。
- 前回は結合(join)について最も基本の「inner join」と、別パターン(left outer join、right outer join、full outer join)を学んだ。
複数条件の結合
- 前回のinner joinの例示では、「2つのテーブルを、1つの共通列を軸に結合」した。
- ただ、実務では「2つ以上の共通列を軸に結合」したい場合がある。
- 例示は以下。販売実績のテーブル(small_sales_2)と、販売目標のテーブル(small_target)があるとして、『販売月とカテゴリ(メンズかレディス)』ごとに、販売実績と販売目標を比較したい場合。
- SQLとしては以下のようになる。「year_month」と「category」という2つの共通列を、andを用いて結合しているのがポイント。なお、もし「year_month」のみで結合するとレコードは2倍に増えてしまう(例えば2019-01-01のmen’sに、2019-01-01のmen’sとlady’sがそれぞれ紐づくため)。
- joinしたあとは結果テーブルのレコード数を確認すること。これは、条件を誤りレコードが数倍になるミスを防ぐため。
3つ以上のテーブルの結合
3つ以上のテーブルを結合する(基本)
- 続いて、3つ以上のテーブルを結合するやり方を見ていく。
- 構文としては基本形(inner joinで2つのテーブルを結合)と大きな違いはない。
- 末尾に「join テーブル名③ on テーブル名①.テーブル名①の列 = テーブル名③.テーブル名③の列」を追記するかたち。
- 具体的な例で見ていく。以下のとおり「販売テーブル(small_sales_3)、ショップマスタ(small_s_master)、商品マスタ(small_p_master)」と3つのテーブルを用意した。
- 実務的には、日々発生するデータは販売テーブルで管理する。そして商品やショップの詳しい情報を取得したい場合は、product_id、shop_idなどの外部キーを用いて、商品マスタやショップマスタを見に行くことになる。
- 以上の3つのテーブルを、シンプルにusing句を使ってつなげたものが以下。
- 1つのテーブルに対して2つのテーブルをぶら下げるイメージ。
3つ以上のテーブルを結合する(応用)
- 続いて、もう一つのパターンを見ていく。
- まず、以下のとおり「地域マスタ」を新たに用意した。
- 実務的には、普段の売り上げは販売テーブルで管理し、ショップの詳細情報が必要なときはショップマスタを参照する。さらに地域の詳細情報が必要なときは、ショップマスタから地域マスタを参照しにいく。
- 以上のテーブルもふくめ、on句を使ってつなげたものが以下。
- 今度は、「販売テーブル⇒ショップマスタ⇒地域マスタ」と「数珠繋ぎ」にするイメージ。
4つのテーブルを結合する
- 3つのテーブルの結合の応用で、4つのテーブルを結合する。
- ①販売テーブルの下に②商品マスタと③ショップマスタがぶら下がり、③ショップマスタの下に④地域マスタがぶら下がる階層構造をイメージいただきたい。
- 事例は以下のとおり。4つであってもon句を用いて繋げていけるイメージがわくと思う。
考察
- SQLについて。実務では「扱いやすさ」の観点から複数テーブルに分かれているが、分析においては「幅広く見る」ためにテーブルをつなげる必要がある。
- 今回は「異なる性質(列)で分けたデータ」を、”横”につなげる操作「結合(join)」の応用を学んだ。
- 考察。SQLで扱うテーブルが3つ以上になると、実際の業務でどのようにテーブルを扱うかと、それらテーブルの関係をグラフィカルに整理したER図の知識も必要になる。
- 資格試験の午後問題が「業務フロー・ER図・SQLの関係」の読解力を確認する試験になるのも、実用面から納得できる。
参考書籍
- 集中演習 SQL入門/木田和廣/株式会社インプレス
- データベーススペシャリスト2022年版/三好康之/翔泳社
- おうちで学べるデータベースのきほん/ミック,木村明治/翔泳社
コメント