Looker Studioの結合演算子を理解する!どれを使えばいいかわからない方必見

Looker Studio

Looker Studioで統合データを扱う際に避けては通れないのが「結合演算子何を選べばいいか問題」。

結合演算子には「左外部結合」「右外部結合」「内部結合」「完全外部結合」「クロス結合」の5つも種類があるため、それぞれどう違い、何を選ぶとどのような結果になるのかいまいち把握していない方も多いのではないだろうか。

今回は、Looker Studioの結合演算子5つの違いとそれぞれの挙動、どういった基準でどれを選べばいいのかについて解説する。

※ 本記事の内容を理解するために、最低限おさえておくべき用語を以下にまとめる。

テーブル:「表」形式のデータのこと
フィールド:テーブルの列のこと。「カラム」と呼ばれることもある
レコード:テーブルの行のこと
結合キー:各テーブルの結合に使うフィールド名のこと

そもそもテーブルの結合とは?

複数のテーブルを1つのテーブルとしてまとめ、より詳細な分析や可視化を行うための機能のことである。

例えば、顧客データや商品データ、売上データなど別々で管理している異なるテーブルを、結合により1つのテーブルにまとめることで、どのような顧客がどのような商品をいくらぐらい買う傾向にあるのかといったより深い洞察を得たり、データビジュアライゼーションにおいて複雑なレポートを作成できたりする。

Looker Studioの5つの結合演算子

結合演算子は5つあり、意味はそれぞれ以下のとおりである。

左外部結合左側のテーブルはすべてのレコードを、右側は左側と値が重なっているレコードのみを残す
右外部結合右側のテーブルはすべてのレコードを、左側は右側と値が重なっているレコードのみを残す
内部結合それぞれのテーブルが共通して持つフィールドの値が重なっているレコードのみを残す
完全外部結合それぞれのテーブルにある全レコードを残す
クロス結合左側テーブルのすべてのレコードの1行1行に、右側テーブルの全レコードを結合する。
総当たりで結合していくため、5つの結合演算子の中で唯一結合キーが必要ない

もう少し具体的に説明しよう。
注文があった数量を管理する「order_quantity」と注文のあった商品名を管理する「order_name」の2つのテーブルがあるとする。

テーブル①:order_quantity

order_idorder_qty
B8
C5
D3

テーブル②:order_name

order_idorder_name
Aピーマン
B納豆
Cヨーグルト

実務においてはこんなシンプルなテーブルはありえないと思うが、今回は結合演算子の違いを理解していただくために、あえて簡素なテーブルを用意している。
これらをそれぞれの結合演算子で結合すると以下のようになる。なお、「order_quantity」テーブルを左側、「order_name」テーブルを右側とし、結合キーはorder_idフィールドとなる。

左外部結合

order_idorder_qtyorder_name
B8納豆
C5ヨーグルト
D3null

内部結合

order_idorder_qtyorder_name
B8納豆
C5ヨーグルト

クロス結合

order_id
(①)
order_qtyorder_id
(②)
order_name
B8Aピーマン
B8B納豆
B8Cヨーグルト
C5Aピーマン
C5B納豆
C5Cヨーグルト
D3Aピーマン
D3B納豆
D3Cヨーグルト

右外部結合

order_idorder_qtyorder_name
Anullピーマン
B8納豆
C5ヨーグルト

完全外部結合

order_id
(①)
order_qtyorder_id
(②)
order_name
nullnullAピーマン
B8B納豆
C5Cヨーグルト
D3nullnull

左外部結合

左外部結合

左外部結合は、左側のすべてのレコードと左側と値が重なっている右側のレコードのみを返すため、左側の「order_quantity」テーブルのすべてのレコードが返されるが、右側の「order_name」テーブルにしかないorder_id:Aのレコードは返されない。
最終的なテーブルとしては、共通のorder_id:B、Cを持つ“納豆”と“ヨーグルト”はorder_nameフィールドにて返されるが、左側テーブルの「order_quantity」にしかないorder_id:Dのorder_nameフィールドには“null”が返される。

右外部結合

右外部結合

右外部結合は、右側のすべてのレコードと右側と値が重なっている左側のレコードのみを返すため、右側の「order_name」テーブルのすべてのレコードが返されるが、左側の「order_quantity」テーブルにしかないorder_id:Dのレコードは返されない。
最終的なテーブルとしては、共通のorder_id:B、Cを持つ“8”と“5”はorder_quantityフィールドにて返されるが、右側テーブルの「order_name」にしかないorder_id:Aのorder_quantityフィールドには“null”が返される。

右外部結合と左外部結合は相対しているものなので、左側のテーブルを右側にもってきて、右外部結合した場合、同じ結果が得られる。

内部結合

内部結合

内部結合は、それぞれのテーブルが共通して持つフィールドの値が重なっているレコードのみを残すため、共通のorder_id:B、Cを持つレコードのみがそれぞれのテーブルから返される。
つまり、order_quantityフィールドでは“8”と“5”が、order_quantityフィールドには“納豆”と“ヨーグルト”が返される。

完全外部結合

完全外部結合

完全外部結合は、それぞれのテーブルにある全レコードを残すため、最終的なテーブルとしては、一方のテーブルにはあって他方のテーブルにはないフィールドの値は“null”となる。

クロス結合

クロス結合

クロス結合は、左側テーブルのすべてのレコードの1行1行に右側テーブルの全レコードを総当たりで結合していくため、左側テーブルである「order_quantity」の1行目に、右側「order_name」テーブルの3行が結合され、同じように「order_quantity」の2行目に、右側「order_name」テーブルの3行が結合され…といったかたちで結合されていく。

クロス結合は、5種類の中で最もレコード数が多くなる結合演算子であり、最終的なテーブルの行数は、各テーブルのレコード数の掛け算となる。
例えば上記の場合、3レコードずつのテーブルの結合のため、3×3で9行のテーブルとなる。

3つ以上のテーブルの結合での考え方

3つ以上のテーブルの結合の場合でも、結合方法がどのテーブル同士でも同じ演算子を使っていれば、2つのテーブルの結合のときとそこまで変わらない。

例えば、商品IDと店舗ごとの売上個数を管理する「sales」と、店舗の名前を管理する「shop」、店舗があるエリア名を管理する「area」の3つのテーブルがあるとする。

テーブル①:sales

product_idshop_idsales
AX180
AW154
AY113
BT121
BZ172
BS196

テーブル②:shop

shop_idarea_idshop_name
V5渋谷店
W3吉祥寺店
X1中野店
Y1東中野店
Z2高円寺店

テーブル③:area

area_idarea_name
1中野区
2杉並区
3武蔵野市
4世田谷区

それぞれを左外部結合した場合と完全外部結合をした場合を以下に示す。

sales」左外部結合「shop」左外部結合「area

product_idshop_idsalesarea_idshop_namearea_name
AX1801中野店中野区
AW1543吉祥寺店武蔵野市
AY1131東中野店中野区
BT121nullnullnull
BZ1722高円寺店杉並区
BS196nullnullnull

sales」完全外部結合「shop完全外部結合area

product_idshop_idsalesarea_idshop_namearea_name
nullnullnullnullnull世田谷区
nullnullnull5渋谷店null
AX1801中野店中野区
AW1543吉祥寺店武蔵野市
AY1131東中野店中野区
BT121nullnullnull
BZ1722高円寺店杉並区
BS196nullnullnull

結合するテーブルが3つあるためフィールド数も多くなるが、2つのテーブルの結合のときと基本的な考え方は何ら変わらないことがわかるだろう。

異なる演算子が混在する場合の留意点

各テーブル同士の結合で異なる演算子が混在する場合には1つだけ留意点があり、「Looker Studioでは、結合するテーブルの順番は選べず、左端から順に結合されていく」ということを押さえておく必要がある。

例えば、以下のテーブルを完成イメージとして各テーブルを結合したいとする。

product_idshop_idsalesarea_idshop_namearea_name
AX1801中野店中野区
AW1543吉祥寺店武蔵野市
AY1131東中野店中野区
BT121nullnullnull
BZ1722高円寺店杉並区
BS196nullnullnull

Looker Studioで結合の順番を自由に指定できる場合、

「sales」左外部結合「shop」内部結合「area」

のようなかたちにして、「shop」内部結合「area」を優先結合すれば、上のテーブルが完成する。

しかしLooker Studioではそれができないため、以下の2通りのパターンで結合するしかない。

  • 「sales」左外部結合「shop」左外部結合「area」
  • 「shop」内部結合「area」右外部結合「sales」

このように、どのテーブルも結合方法がすべて同じであれば非常にシンプルだが、異なる結合演算子が混在する場合、結合は左端から順に行われていくことを念頭に入れて行うようにしよう。

結局どれを使えばいいの?

ここまでそれぞれの結合演算子の違いについて説明してきたが、「結局この5つの中のどれを使えばいいの?」という問いに対しては、「どのデータを見たいかによって使い分ける」というのが答えになる。

例えば、「Looker Studioの5つの結合演算子」の章で用いたテーブルでの結合の場合、“null”のような曖昧で正確なデータかどうかわからないものは可視化したくないのであれば、内部結合を選ぶべきだと思うし、注文のあった商品名より注文のあった数量を優先して可視化させたい場合は、左外部結合を選ぶべきだろう。

このような具合で、どのデータを見たいか・見せたいかで都度どれを選ぶか変わってくるので一概に言えるものではない。

ただし、私自身がよく使っているのは「左外部結合」と「内部結合」の2つである。

左外部結合と右外部結合はLooker Studio上で結合の設定を行う際に、どちらのテーブルを左側あるいは右側に持ってくるかだけの違いであるし、クロス結合も、SQLで新しいテーブルを作るための計算過程で使うことはあっても、データビジュアライゼーションを目的とするBIツールで使うことはほとんどないと言っていい。

おわりに

本記事では、Looker Studioの結合演算子5つの違いと、どれを選択すればいいのかというよくある疑問に対する答えについて言及した。

結合演算子はSQLが書ける方からすると馴染みやすいかと思うが、そうでない方からすると理解するのに一苦労かと思うので、本記事を参考にぜひとも習得してほしい。