5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

INNER JOINのINNERを省略したらどうなるか?

Posted at

結論を言うと、INNER JOINJOINは一緒です。
INNERは省略できるので、JOINと宣言されているのはINNER JOINと同じと思ってよいと思います。

省略はした方が良いのだろうか?

コード規約に沿って記載すべき、というのが結論ですが
こういうのを明示的に設定してない所もあるので、個人的な見解を記載します。

正直、手間をかけてもINNERは記述したほうが良いと思います。

メソッドのjoinと合わさると可読性落ちる

言語によっては、joinというメソッドがあると思います。
SQLの文字列結合をする際に、JOIN句とjoinが重なることがあると思います。
区切りとして、結合のJOIN句で改行するというのは結構あるので、以下のようなちょっと面白い現象が起きます。

sql.join("join JAGI jagi on ....")

上記はネタですが、思ったよりプログラムの標準メソッドと予約語などが混ざると読みにくくなります。
極力標準で存在する名前と被るような記述は、やめておきましょう。

JOINだけだと記述ミスなのか、想定挙動なのかパッと見分からない

JOINだけの記載があるとパッと見どちらなのか分からないことですね。

  1. 本当はLEFT JOINだけど、書き忘れちゃった♡
  2. INNER JOINを略しただけだよ♡

少なくとも、レビューや調査の際にいちいち確認する必要が出ます。
記述ミスではなく、INNER JOINを略しただけか?と。

そんなことをするくらいなら、INNERをちゃんと記述するほうが結果的に楽できると思います。

おまけ:JOIN句とカンマによる記述はどっちの方が見やすいか

カンマによる記述

カンマによる羅列というのは、こういうやつです。

select * from tableA, tableB
where tableA.key1 = tableB.key1
and tableA.key2 = tableB.key2 
and tableA.column = 1

上記と下記は一緒の挙動をします。

JOIN句による記載

select * from tableA
inner join tableB 
on tableA.key1 = tableB.key1
and tableA.key2 = tableB.key2 
where tableA.column = 1

どちらの方が見やすいか?

どちらの方が見やすいかというと、圧倒的に後者です。
それはJOIN句をつけることで、下記が圧倒的に見やすくなります。

  • テーブルが何を基準にしているか
  • 外部結合か内部結合かがすぐわかる
  • 結合のキーとなる項目(漏れがあるかもわかりやすい)
  • 基準元テーブルを絞り込む抽出条件

今回は例として非常に簡単な文でしたが、これが3つ、4つのテーブル
WHERE句が複雑になってくると可読性が劇的に変わってきます。

同じ挙動をさせるのであれば
余程のことが無い限りは、JOIN句でSQLを記述するのがベストだと思います。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?