この記事は「データベーススペシャリスト資格に興味はあるが、どのようなものか?どう学ぶのか?」という方向けに、具体的な内容と私自身の挑戦ログをお伝えする。学び中の方や、これから学ぼうとされる方の参考になれば幸いだ。
今回はSQLによるテーブルの集合演算(2/3)について書く。
※注意点として、SQLはDBMSによって作法が異なる。この記事はGoogle Big Queryに準拠するものであることをお含みおき願いたい。
和集合の他パターン
前回振り返り
- SQLについて。実務では「扱いやすさ」の観点から複数テーブルに分かれているが、分析においては「幅広く見る」ためにテーブルをつなげる必要がある。
- 前回は「集合演算」の基本を学んだ。これは「一定期間ごとの集計レコード」を”縦”につなげる操作。
- 今回は応用を学ぶ。具体的には和集合の他パターンや、積集合・差集合。
和集合の他パターン
- 実際にテーブルを用意し、SQLの集合演算を行ってみる。
- たとえば、ある魚屋の売上表(日付、商品名、個数)について、1月分(small_jan)と2月分(small_feb)があるとする。
- 前回、全ての列を対象にunionした際は、「union all(そのまま足し合わせる)」でも「union distinct(重複を許可しない)」でも結果は変わらなかった。
- そこで今回は、以下のように2つのテーブルの和集合で「union distinct」(重複を許可しない)にして結果が変わるパターンを試す。
- 以下のとおり、和集合の対象列を「product_name」に限定することで、完全に重複するレコードは許可されない。
- 結果として1月と2月に販売された、ユニークな、つまり重複を取り除いた商品リストか完成した。
積集合
基本的な考え方(再掲)
- 複数のテーブルの値のうち、共通(重複)している部分を積集合と呼ぶ。
- たとえば、テーブル①は「a,b,c」、テーブル②は「c,d,e」と各々値を持っているとする。
- このとき、テーブル①と②の積集合は「c」のみとなる。
- 試験対策。積集合の記法は「∩」または「×」となる。
積集合のSQL構文
まず、積集合のSQL構文は「intersect」を用いる。具体的には以下のとおり。
- select フィールド名 from テーブル名①
- intersect distinct
- select フィールド名 from テーブル名②
なお注意点は以下のとおり。
- ふたつのselect句で指定するフィールドの種類・数・順序を完全一致させる必要がある。
- また、積集合の対象となるのは「selecet句で取得している全フィールドの内容が全て一致する」もののみ。和集合で言う「重複」に該当する部分。
積集合のSQL実例
- 実際にテーブルを用意し、SQLの集合演算を行ってみる。
- 先ほど示した、ある魚屋の売上表(日付、商品名、個数)の1月分(small_jan)と2月分(small_feb)を用いる。
- このとき、積集合の対象列を「product_name」に限定すれば、以下のとおり重複部分を取得できる。
差集合
基本的な考え方(再掲)
- 複数のテーブルにおいて、テーブル①からテーブル②の値を差し引いた部分を差集合と呼ぶ。
- たとえば、テーブル①は「a,b,c」、テーブル②は「c,d,e」と各々値を持っているとする。
- このとき、テーブル①-②の差集合は「a,b」のみとなる。
- なお、差集合のみ計算順により結果が変わる。
- 具体的には、テーブル②ー①と計算した際の差集合は「d,e」となる。
- 試験対策。和集合の記法は「-」となる。
差集合のSQL構文
まず、差集合のSQL構文は「except」を用いる。具体的には以下のとおり。
- select フィールド名 from テーブル名①
- except distinct
- select フィールド名 from テーブル名②
なお注意点は以下のとおり。
- ふたつのselect句で指定するフィールドの種類・数・順序を完全一致させる必要がある。
差集合のSQL実例
- 実際にテーブルを用意し、SQLの集合演算を行ってみる。
- 先ほど示した、ある魚屋の売上表(日付、商品名、個数)の1月分(small_jan)と2月分(small_feb)を用いる。
- 以下のとおり、差集合の順番を入れ替えると結果が変わることもわかる。
考察
- SQLについて。分析においては、実務上複数に分かれているテーブルをつなげる必要がある。
- 今回は「一定期間ごとの集計レコード」を”縦”につなげる操作「集合演算」の応用を学んだ。具体的には和集合の他パターンや、積集合・差集合。
- 考察。SQLはローカルルールが多く、データ分析は数学の難解な言葉を用いるので、これらを全て覚えるのではなく、基本を抑えて応用する「一を聞いて十を知る」戦略を取りたい。
- そこで重要なのは文章の意味・真意を読み取る「読解力」。資格学習はこの素養が必須なため、常に意識して研鑽したい。
参考書籍
- 集中演習 SQL入門/木田和廣/株式会社インプレス
- データベーススペシャリスト2022年版/三好康之/翔泳社
- おうちで学べるデータベースのきほん/ミック,木村明治/翔泳社
- AI vs 教科書が読めない子どもたち/新井紀子/東洋経済
コメント