MySQLでのinner join文の使い方
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つずつ分解して考えていけば、正しいデータが抽出できるはずだぞ!