※この記事は実務半年〜1年の方に向けた記事です。
SQLの結合を書く際、なかなか思い通りの結果が取得できずに結合条件に悩むことがあります。
ただ、とある現場でクロス結合を使えばだいぶ楽になることを学んだので、今回はその考え方を共有してきます。
これを単純にクロス結合します。クロス結合とは、総当たりで結合するということです。
SELECT * FROM restaurant_name,restaurant_reputaion
こうなります。これでも総当りの意味がいまいちつかめない人のために一部とりだすと、こういうことです(僕は最初そうでした)
つまり、
①あくせる亭という一行に対して評判テーブルがすべてくっつき、
②総当たりのためあくせる亭が評判テーブルの行数分増えている
ということです。あとは同じことを左側のテーブル(ここではレストランテーブル)の行数だけ繰り返しているだけです。
ここまででクロス結合の考え方はつかめたはずです。
次に、クロス結合にある条件を付け足します。
SELECT * FROM restaurant_name,restaurant_reputaion
WHERE restaurant_name.id = restaurant_reputaion.id
日本語にすると「レストランテーブルのidと評判テーブルのidが等しいものをくっつける」といったところでしょうか。
これを先程の画像を用いて説明します。
まず先程同様あくせる亭に評判テーブルがくっつきます。
続いてwhere句をみると、「レストランテーブルのidと評判テーブルのidが等しいものをくっつける」ので、
id=1以外の行はくっつかずに消滅します。あとはレストランテーブルの行数分これを繰り返していきます。
すると結果が、
となります。
今回はもう結果は貼りませんが、これはINNER JOINを使用したSQL文の
SELECT * FROM restaurant_name INNER JOIN restaurant_reputaion ON restaurant_name.id = restaurant_reputaion.id
と同じ結果になります。
INNER JOINでの結合条件が思いつかないときは、まずクロス結合で結果を表示してから、
絞っていくとわかりやすいかと思うのでぜひ試してみてください。