28 Feb 2014, 23:28

【SQL テーブル結合】INNER JOIN とWHERE結合の違いについて

テーブルを内部結合するとき、いつもINNER JOINを使って書いていたが、
「FROM句のあとに複数のテーブルを書いてWHERE句で絞り込む」やり方があることを知った。具体的には以下のようなやり方だ。

INNER JOIN型

SELECT * FROM table1 INNER JOIN table2 ON table1.id=table2.id

WHERE型

SELECT * FROM table1 table2 WHERE table1.id=table2.id

結果的には同じだし、調べる限りだとどちらが良いとかメリット・デメリットとかないそう。個人的には「何に何を結合しているのかわかりやすい」という点からINNER JOIN型をおすすめしたいところ。

DBスペシャリストの資格の勉強で、問題をみてるとだいたいWHERE型なので、普段INNER JOIN型を使っている自分は戸惑うことがある。

その後考えてみて

いろいろ考えてみたのだが、やはりFROM句の後にテーブルを複数書いてWHEREで結合させるのはナンセンスだと思う。

例えば、内部結合に加え、外部結合もある場合を考える。

WHERE型

SELECT * 
FROM table1, table2 #←結合させたいもの
LEFT OUTER JOIN (
 ・
 ・
<副問い合わせとか長いSQLが入ると想定>
 ・
 ・
) AS sub
ON table1.id=sub.id AND table2.id=sub.id
WHERE table1.id=table2.id #←結合条件
 

table1とtable2を内部結合させたいのに、肝心の何と何を結合させるかの部分の”WHERE table1.id=table2.id”が離れてしまい、QL文全体として何をしたいかわかりずらいからだ。

一方、INNER JOINなら

SELECT * 
FROM table1
INNER JOIN table2 ON table1.id=table2.id #←結合させたいものと結合条件が一緒
LEFT OUTER JOIN (
 ・
 ・
<副問い合わせとか長いSQLが入ると想定>
 ・
 ・
) AS sub
ON table1.id=sub.id
 

上記のように、結合させたいテーブルと結合させる条件がくっつくため、
全体としてなにをしたいかわかりやすい気がする。

慣れの問題なのかもしれんが、圧倒的にINNER JOINがわかりやすいのではないかと考えている。

関連する記事はこちら
  • DBのViewの使いどころの検討 (2016/03/16)
  • ER図作成ツール MySQL Workbench を使ってみる (2014/05/06)
  • データベース、隔離性水準とはなにか (2014/03/30)
  • comments powered by Disqus
    このエントリーをはてなブックマークに追加