MySQLでのinner join文の使い方

Last modified date

inner join onの使い方

JOIN文にはいくつか種類があるが、今回はinner joinを紹介するぞ。inner joinを覚えておけばとりあえず複数のテーブルを1つにまとめるのはできるようになるはずだ。

select wp_posts.post_title,wp_terms.name
from wp_posts
inner join wp_term_relationships
on wp_posts.ID = wp_term_relationships.object_id
inner join wp_terms
on wp_term_relationships.term_taxonomy_id = wp_terms.term_id
 ;

inner joinの書き方

基本的な書き方は以下の通りである。whereの前に「inner join」と「on」を置く。

ちなみにinner join onのinnerは省略できるので、joinと書くことができる。他のjoin文、left outer joinはleft join、right outer join は right joinと省略できる。

注意すべき点は2つあるのでこの後で紹介するぞ。

select 最終的に表示したいテーブルの列はなにか
from どのテーブルをベースにするか
inner join どのテーブルをつなげるか
on    どんな条件でつなげるか 
where どの行を表示するか

inner joinはfromで指定するテーブルに注意

inner joinを書く時にまず注意すべきはfromの内容であるぞ。通常のselect文の場合だと、fromには使用するテーブル全てを指定するが、joinを使用する場合は異なるのだ。

inner joinの場合も2つのテーブルを参照するのだから、結合するテーブルと結合されるテーブルの両方のテーブルを選択したくなるが、そうではない。joinを使う場合はベースになる、結合のもとのになるテーブルのみを指定すれば良いのだ。

select 最終的に欲しいテーブルの列はなにか
-- fromに全てのテーブルを書かない。
from ベースとなるテーブル
join つなげるテーブル
on つなげる条件
 ;

複数のテーブルをinner joinする場合は、順番に注意

2つ以上のテーブルも同じように連結することが可能であるぞ。下の例のように、単純に同じように追加していけばよい。

ここで注意すべきなのは、まず、上で繋げたテーブルは下のテーブルを連結する条件に使用できるということだ。

left join 追加テーブル① ON ○○(ベーステーブルの要素) = ●●(追加テーブル①の要素)
left join 追加テーブル② ON ●●(追加テーブル①の要素) = ▲▲(追加テーブル②の要素)

このように②のテーブルのONで指定する内容に①の要素を使用することが可能だ。②を実行する時には既に①は連結済みで1つのテーブルになっていると考えたほうがわかりやすいかもしれぬな。

そしてもう分かるだろうが、注意すべきはこの順番である。この順番を入れ替えるとエラーになる。

left join 追加テーブル② ON ●●(追加テーブル①の要素) = ▲▲(追加テーブル②の要素)
left join 追加テーブル① ON ○○(ベーステーブルの要素) = ●●(追加テーブル①の要素)

テーブル②の要素をテーブル①の要素を元に連結しようとしても、まだ①は連結されていないので、使用できない。よってエラーになる。

当たり前に感じるかもしれぬが、一見、クエリ文に間違いはないのに、順番が違うだけでエラーになるので、注意しておくべきであろう。

join 連結したいテーブル①
on どの条件でつなげるか①
join 連結したいテーブル②
onどの条件でつなげるか②

inner joinの具体的な使用例

WordpressなんかではよくSQLを操作するので、カテゴリーとタイトルを一緒に表示したりするには以下のようなjoin文で表示することがある。

上で紹介した注意すべき内容を使ってある。

select wp_posts.post_title,wp_terms.name
from wp_posts
join wp_term_relationships
on wp_posts.ID = wp_term_relationships.object_id
join wp_terms
on wp_term_relationships.term_taxonomy_id = wp_terms.term_id
 ;

inner join文の使い方のポイントまとめ

・fromにはベースとなるテーブルを指定する。
・複数のテーブルを連結する際はクエリ文の順番に注意する。

以上がinner join文を使う際の基本的なポイントである。
実務ではもっと複雑なデータの取り出しが必要なこともあるだろうが、1つずつ分解して考えていけば、正しいデータが抽出できるはずだぞ!

魔王様

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Post comment