BIツール

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

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

Looker Studioを使いこなすうえで最も難しい概念の1つに、統合データの結合演算子が挙げられるかと思う。
結合演算子には「左外部結合」「右外部結合」「内部結合」「完全外部結合」「クロス結合」の5つも種類があるため、それぞれどう違い、何を選ぶとどのような結果になるのかいまいち把握していない方も多いのではないだろうか。

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

おさえておくべき用語

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

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

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

テーブルの結合とは、複数のテーブルに分かれて保存されているデータを、結合キーをもとに1つのテーブルとして合体させることを言う。
たとえば、顧客データや商品データ、売上データなど別々で管理している異なるテーブルを、結合により1つのテーブルにまとめることで、どのような顧客がどのような商品をいくらぐらい買う傾向があるのかといったより深い洞察を得ることができる。

Looker Studioの5つの結合演算子

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

Looker Studio 結合演算子
種類説明
左外部結合左側のテーブルはすべてのレコードを、右側は左側と値が重なっているレコードのみを残す
右外部結合右側のテーブルはすべてのレコードを、左側は右側と値が重なっているレコードのみを残す
内部結合それぞれのテーブルが共通して持つフィールドの値が重なっているレコードのみを残す
完全外部結合それぞれのテーブルにある全レコードを残す
クロス結合左側テーブルのすべてのレコードの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
Anullピーマン
B8納豆
C5ヨーグルト
内部結合
order_idorder_qtyorder_name
B8納豆
C5ヨーグルト
完全外部結合
order_id(①)order_qtyorder_id(②)order_name
nullnullAピーマン
B8B納豆
C5Cヨーグルト
D3nullnull
クロス結合
order_id(①)order_qtyorder_id(②)order_name
B8Aピーマン
B8B納豆
B8Cヨーグルト
C5Aピーマン
C5B納豆
C5Cヨーグルト
D3Aピーマン
D3B納豆
D3Cヨーグルト

左外部結合

order_idorder_qtyorder_name
B8納豆
C5ヨーグルト
D3null

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

右外部結合

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

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

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

内部結合

order_idorder_qtyorder_name
B8納豆
C5ヨーグルト

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

完全外部結合

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

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

クロス結合

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

クロス結合は、左側テーブルのすべてのレコードの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

結合の順番を自由に指定できる場合、【「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を書いているような人からすると馴染みやすいかと思うが、そうでない人からすると最初は理解するのが難しいかと思うので、本記事を参考にぜひ習得してほしい。

タイトルとURLをコピーしました