Looker Studioを使いこなすうえで最も難しい概念の1つに、統合データの結合演算子が挙げられるかと思う。
結合演算子には「左外部結合」「右外部結合」「内部結合」「完全外部結合」「クロス結合」の5つも種類があるため、それぞれどう違い、何を選ぶとどのような結果になるのかいまいち把握していない方も多いのではないだろうか。
今回は、Looker Studioの結合演算子5つの違いとそれぞれの挙動、どういった基準でどれを選べばいいのかについて解説する。
本記事の内容を理解するために、最低限おさえておくべき用語を以下にまとめる。
テーブル:「表」形式のデータのこと
フィールド:テーブルの列のこと。「カラム」と呼ばれることもある
レコード:テーブルの行のこと
結合キー:各テーブルの結合に使うフィールド名のこと
そもそもテーブルの結合とは?
テーブルの結合とは、複数のテーブルに分かれて保存されているデータを、結合キーをもとに1つのテーブルとして合体させることを言う。
たとえば、顧客データや商品データ、売上データなど別々で管理している異なるテーブルを、結合により1つのテーブルにまとめることで、どのような顧客がどのような商品をいくらぐらい買う傾向があるのかといったより深い洞察を得ることができる。
Looker Studioの5つの結合演算子
結合演算子は全部で5つあり、意味はそれぞれ以下のとおりである。

| 種類 | 説明 |
|---|---|
| 左外部結合 | 左側のテーブルはすべてのレコードを、右側は左側と値が重なっているレコードのみを残す |
| 右外部結合 | 右側のテーブルはすべてのレコードを、左側は右側と値が重なっているレコードのみを残す |
| 内部結合 | それぞれのテーブルが共通して持つフィールドの値が重なっているレコードのみを残す |
| 完全外部結合 | それぞれのテーブルにある全レコードを残す |
| クロス結合 | 左側テーブルのすべてのレコードの1行1行に、右側テーブルの全レコードを結合する。総当たりで結合していくため、5つの結合演算子の中で唯一結合キーが必要ない |
例えば、注文があった商品の数量を管理する「order_quantity」というテーブルと、注文があった商品の名前を管理する「order_name」というテーブルの2つがあるとする。
| order_id | order_qty |
|---|---|
| B | 8 |
| C | 5 |
| D | 3 |
| order_id | order_name |
|---|---|
| A | ピーマン |
| B | 納豆 |
| C | ヨーグルト |
「order_quantity」を左側のテーブル、「order_name」を右側のテーブル、結合キーを“order_id”とし、それぞれの結合演算子で結合すると以下のようになる。
| order_id | order_qty | order_name |
|---|---|---|
| B | 8 | 納豆 |
| C | 5 | ヨーグルト |
| D | 3 | null |
| order_id | order_qty | order_name |
|---|---|---|
| A | null | ピーマン |
| B | 8 | 納豆 |
| C | 5 | ヨーグルト |
| order_id | order_qty | order_name |
|---|---|---|
| B | 8 | 納豆 |
| C | 5 | ヨーグルト |
| order_id(①) | order_qty | order_id(②) | order_name |
|---|---|---|---|
| null | null | A | ピーマン |
| B | 8 | B | 納豆 |
| C | 5 | C | ヨーグルト |
| D | 3 | null | null |
| order_id(①) | order_qty | order_id(②) | order_name |
|---|---|---|---|
| B | 8 | A | ピーマン |
| B | 8 | B | 納豆 |
| B | 8 | C | ヨーグルト |
| C | 5 | A | ピーマン |
| C | 5 | B | 納豆 |
| C | 5 | C | ヨーグルト |
| D | 3 | A | ピーマン |
| D | 3 | B | 納豆 |
| D | 3 | C | ヨーグルト |
左外部結合
| order_id | order_qty | order_name |
|---|---|---|
| B | 8 | 納豆 |
| C | 5 | ヨーグルト |
| D | 3 | null |
左外部結合は、左側のすべてのレコードと左側と値が重なっている右側のレコードのみを返すため、左側の「order_quantity」テーブルのすべてのレコードが返されるが、右側の「order_name」テーブルにしかないorder_id:Aのレコードは返されない。
最終的なテーブルとしては、共通のorder_id:B、Cを持つ“納豆”と“ヨーグルト”はorder_nameフィールドにて返されるが、左側テーブルの「order_quantity」にしかないorder_id:Dのorder_nameフィールドには“null”が返される。
右外部結合
| order_id | order_qty | order_name |
|---|---|---|
| A | null | ピーマン |
| B | 8 | 納豆 |
| C | 5 | ヨーグルト |
右外部結合は、右側のすべてのレコードと右側と値が重なっている左側のレコードのみを返すため、右側の「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 | order_qty | order_name |
|---|---|---|
| B | 8 | 納豆 |
| C | 5 | ヨーグルト |
内部結合は、それぞれのテーブルが共通して持つフィールドの値が重なっているレコードのみを残すため、共通のorder_id:B、Cを持つレコードのみがそれぞれのテーブルから返される。
つまり、order_quantityフィールドでは“8”と“5”が、order_quantityフィールドには“納豆”と“ヨーグルト”が返される。
完全外部結合
| order_id(①) | order_qty | order_id(②) | order_name |
|---|---|---|---|
| null | null | A | ピーマン |
| B | 8 | B | 納豆 |
| C | 5 | C | ヨーグルト |
| D | 3 | null | null |
完全外部結合は、それぞれのテーブルにある全レコードを残すため、最終的なテーブルとしては、一方のテーブルにはあって他方のテーブルにはないフィールドの値は“null”となる。
クロス結合
| order_id(①) | order_qty | order_id(②) | order_name |
|---|---|---|---|
| B | 8 | A | ピーマン |
| B | 8 | B | 納豆 |
| B | 8 | C | ヨーグルト |
| C | 5 | A | ピーマン |
| C | 5 | B | 納豆 |
| C | 5 | C | ヨーグルト |
| D | 3 | A | ピーマン |
| D | 3 | B | 納豆 |
| D | 3 | C | ヨーグルト |
クロス結合は、左側テーブルのすべてのレコードの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つのテーブルがあるとする。
| product_id | shop_id | sales |
|---|---|---|
| A | X | 180 |
| A | W | 154 |
| A | Y | 113 |
| B | T | 121 |
| B | Z | 172 |
| B | S | 196 |
| shop_id | area_id | shop_name |
|---|---|---|
| V | 5 | 渋谷店 |
| W | 3 | 吉祥寺店 |
| X | 1 | 中野店 |
| Y | 1 | 東中野店 |
| Z | 2 | 高円寺店 |
| area_id | area_name |
|---|---|
| 1 | 中野区 |
| 2 | 杉並区 |
| 3 | 武蔵野市 |
| 4 | 世田谷区 |
それぞれを左外部結合した場合と完全外部結合をした場合を以下に示す。
| product_id | shop_id | sales | area_id | shop_name | area_name |
|---|---|---|---|---|---|
| A | X | 180 | 1 | 中野店 | 中野区 |
| A | W | 154 | 3 | 吉祥寺店 | 武蔵野市 |
| A | Y | 113 | 1 | 東中野店 | 中野区 |
| B | T | 121 | null | null | null |
| B | Z | 172 | 2 | 高円寺店 | 杉並区 |
| B | S | 196 | null | null | null |
| product_id | shop_id | sales | area_id | shop_name | area_name |
|---|---|---|---|---|---|
| null | null | null | null | null | 世田谷区 |
| null | null | null | 5 | 渋谷店 | null |
| A | X | 180 | 1 | 中野店 | 中野区 |
| A | W | 154 | 3 | 吉祥寺店 | 武蔵野市 |
| A | Y | 113 | 1 | 東中野店 | 中野区 |
| B | T | 121 | null | null | null |
| B | Z | 172 | 2 | 高円寺店 | 杉並区 |
| B | S | 196 | null | null | null |
結合するテーブルが3つあるためフィールド数も多くなるが、2つのテーブルの結合のときと基本的な考え方は何ら変わらないことがわかるだろう。
異なる演算子が混在する場合の留意点
各テーブル同士の結合で異なる演算子が混在する場合には1つだけ留意点があり、「Looker Studioでは、結合するテーブルの順番は選べず、左端から順に結合されていく」ということを押さえておく必要がある。
たとえば、以下のテーブルを完成イメージとして各テーブルを結合したいとする。
| product_id | shop_id | sales | area_id | shop_name | area_name |
|---|---|---|---|---|---|
| A | X | 180 | 1 | 中野店 | 中野区 |
| A | W | 154 | 3 | 吉祥寺店 | 武蔵野市 |
| A | Y | 113 | 1 | 東中野店 | 中野区 |
| B | T | 121 | null | null | null |
| B | Z | 172 | 2 | 高円寺店 | 杉並区 |
| B | S | 196 | null | null | null |
結合の順番を自由に指定できる場合、【「sales」左外部結合「shop」内部結合「area」】のようなかたちにして、「shop」内部結合「area」を優先結合すれば、上のテーブルが完成する。
しかしLooker Studioではそういった結合順の指定ができないため、【「sales」左外部結合「shop」左外部結合「area」】か【「shop」内部結合「area」右外部結合「sales」】のいずれかで指定する必要がある。
このように、どのテーブルも結合方法がすべて同じであれば非常にシンプルだが、異なる結合演算子が混在する場合、結合は左端から順に行われていくことを忘れないようにしよう。
結局どれを使えばいいの?
ここまでそれぞれの結合演算子の違いについて説明してきたが、「結局この5つの中のどれを使えばいいの?」という問いに対しては、「どのデータを見たいかによって使い分ける」というのが答えになる。
たとえば、「Looker Studioの5つの結合演算子」の章で用いたテーブル同士を結合する場合、“null”のような曖昧で正確なデータかどうかわからないものを表示させたくないのであれば内部結合を選ぶべきだと思うし、注文のあった商品名より注文のあった数量を優先して可視化させたい場合は、左外部結合を選ぶべきだろう。
ただし、実際の現場で比較的よく使われているのは「左外部結合」と「内部結合」の2つだ。
クロス結合は、SQLで新しいテーブルを作るための計算過程で使うことはあっても、データの可視化を目的とするBIツールで使うことはほとんどないと言っていいし、右外部結合も、どちらのテーブルを左側あるいは右側として結合するかだけの違いなので、「左外部結合」か「右外部結合」のどちらかがあれば成立する。完全外部結合もNULLが多くなってしまうため、そこまで使用頻度は高くない。
そうなると、大体使う結合演算子は、「左外部結合」か「内部結合」に絞られる。
おわりに
本記事では、Looker Studioの結合演算子5つの違いと、どれを選択すればいいのかというよくある疑問に対する答えについて言及した。
普段からSQLを書いているような人からすると馴染みやすいかと思うが、そうでない人からすると最初は理解するのが難しいかと思うので、本記事を参考にぜひ習得してほしい。


