SQLの達人への第一歩、結合と抽出を同時に処理するINNER JOINの使い方をマスターしよう
  • facebookページ
  • twitterページ
  • 2019.11.02

    SQLの達人への第一歩、結合と抽出を同時に処理するINNER JOINの使い方をマスターしよう

    結合と抽出を同時に処理するINNER JOINを、使い難いと感じる方がいるのではないでしょうか。今回は、そのような方のために、INNER JOINの基本と賢い使い方について解説します。

    SQLの基本は関連と抽出

    SQLの役割をさっくり言ってしまえば、データベースに格納されたデータを関連付けし、さらに条件によって必要なデータを抽出したリストの出力です。SQLを学んだ方なら、SELECT文のFROM句で複数のテーブルを参照し、WHERE句に指定した条件で抽出することをご理解されているでしょう。

    しかし、INNER JOINを使えば、SQLの基本とも言えるデータの関連と抽出の両方を一度にできることをご存じでしょうか。まずは、INNER JOINとはどのようなコマンドかについて解説します。

    SQLにおける表結合コマンドは5つ

    SQLが使えるデータベースは一般的にはリレーショナルデータベースと呼ばれており、格納されたデータの関係を使って複雑な表を作れるのが特徴です。そして、SQLでは、テーブルを結合する方法として、次の5つの機能を
    規定しています。

    内部結合:INNER JOIN
    外部結合(左結合):LEFT OUTER JOIN
    外部結合(右結合):RIGHT OUTER JOIN
    外部結合(全結合):FULL OUTER JOIN
    交差結合:CROSS JOIN

    内部結合と外部結合は、中学の数学で使われるベン図で表すと次のような関係になると考えてください。

    この図でも解るとおり、今回取り上げるINNER JOINは内部結合であり、2つのテーブルの両方に一致するデータのみを出力する機能です。

    関連と抽出を同時にできるINNER JOIN

    先ほどご紹介したベン図のように、INNER JOINは、参照する2つのテーブルで両方とも条件に一致するデータのみ結合されます。これは別の見方をすれば、条件に合わないデータは、結合する2つのテーブルから除外される、ということです。

    そのためINNER JOINは、結合する2つのテーブルの両方に関連しているデータだけを抽出し、それらを結合するという2つの機能を同時に行う機能としても使えます。そしてINNER JOINの条件を指定するON句の機能は、WHERE句で抽出条件を指定していることと同じ機能として補償されており、WHERE句の代わりとしても利用可能です。

    INNER JIONの基本

    今回解説しているINNER JOINは、SELECT文のFROM句の次に記述し、2つのテーブルを続くON句の条件で関連付けして結合します。なお、この基本的な文法は次のとおりです。

    FROM テーブル1 INNER JOIN テーブル2 ON 結合条件

    次に、INNER JOINを使ったSQLの例を紹介します。

    この例では、table1とtable2の2つのテーブルを、table1.id = table2.idの条件で結合します。ただし、左側に記述したtable1に格納されたデータでも、table1のidとtable2のidが一致しないデータは出力されません。

    ポテパンダの一言メモ

    INNER JOINは、結合する2つのテーブルの両方に関連しているデータだけを抽出し、それらを結合するという2つの機能を同時に行います。

    INNER JIONの基本的な使い方

    先ほどINNER JOINの概要を解説しましたが、その使い方をイメージできない方もおられるでしょう。そのような
    方のために、次から具体的なデータを使ってINNER JIONの基本的な使い方を説明します。

    INNER JIONの使用例

    2つのテーブルを使って、INNER JOINの使い方を解説します。

    table1の要素
    id 都道府県 地方 フラグ
    1 東京 関東 1
    2 神奈川 関東 1
    3 大阪 近畿 1
    4 愛知 中部 1
    5 埼玉 関東 1

    table2の要素
    code 地方 フラグ
    101 北海道 1
    102 東北 1
    103 関東 1
    104 中部 1

    この2つのテーブルを、「地方」を条件として、INNER JOINを実行すます。この場合、SQLは次のとおりです。

    SQLの実行結果
    id 都道府県 地方 フラグ code 地方 フラグ
    1 東京 関東 1 103 関東 1
    2 神奈川 関東 1 103 関東 1
    4 愛知 中部 1 104 中部 1
    5 埼玉 関東 1 103 関東 1

    このSQLでは、table1の地方とtable2の地方に格納された共通の「関東」のデータが取り出されます。なお、この条件に合うデータは、table1では、都道府県名が「東京」「神奈川」「愛知」「埼玉」の4つで、table2ではcodeが「103」「104」の2つです。そして、それらを結合した結果が、上記のとおりです。

    ONには複数の条件が書ける

    SQLで使われるON句は、JOINで結合する条件を記述しますが、ANDやORを使うことで複数の条件を記述できます。例えば、次のとおりです。

    WHEREで指定するのと同じ

    先ほど、ON句には複数の条件を記述できると解説しましたが、ONには2つのテーブルの関係だけでなく、WHERE句で指定する抽出条件もここに書けます。例えば、次のSQLも記述できます。

    そして、このSQLは、次のWHEREを使ったSQLと同じです。次にINNER JOINを使って抽出する例を紹介します。

    WHEREで書き換えた例は次のとおりです。

    なお、上の例のようにINNER JOINを使うことで、WHEREと同じ抽出条件を書けますが、抽出条件はWHEREで書いておくことが推奨されるケースもあります。両方使えるようにしておきましょう。

    INNER JIONを使った応用例

    先ほど解説したように、INNER JOINは2つのテーブルを結合し、なおかつ、WHERE句の代わりにON句に抽出条件を記述できるのが特徴です。そして、この機能をうまく利用すれば、副次問い合わせのSELECT文に使うことで、いろいろなメリットが生まれます。次から、INNER JOINを活用した応用例をご紹介します。

    副次問い合わせの代わりに使う

    SQLでは、既存のテーブルからデータを集めてリストを作る際、入れ子となるSELECT文で作ったリストが利用できます。これは、副次問い合わせと呼ばれ、SQLではよく使われる機能です。

    この副次問い合わせには、SELECT文で始まる既存のテーブルから抽出する処理で作ったリストを使いますが、INNER JOINで結合と抽出を同時に実行して作ったリストも同じように利用できます。

    テーブル結合の高速化のために使う

    多くのデータを格納したテーブル同志を結合するのには、処理効率の良いデータベース管理ソフトを使ったとしても、処理に時間がかかります。さらにそういった大きなテーブルを幾つも結合する場合、処理が遅いと感じることがあるでしょう。

    しかし、結合するテーブルのデータを予め少なくしておけば、処理を高速化できます。そのために、活用したいのが、INNER JOINです。INNER JOINでは、テーブルの結合と抽出を同時に処理でき、さらに、抽出したデータのみ結合すれば、処理の高速化が可能です。

    次に、OUTER JOINで結合するリストを、INNER JOINで作成する例を紹介します。

    この例では、表1をリストの最も左側に配置し、その右側に、表2、表3、表4を結合します。なお、その際、INNER JOINを使い、表2、表3、表4で条件に合うデータのみ結合したリストを作り、それを結合しています。そのため、予め少ないデータを結合しているので、全て結合してから条件に合わせて抽出するよりも処理
    を高速化できます。

    INNER JOINを使った効率の良いSQLをマスターしよう

    INNER JOINは、SQLのテーブル結合機能の中でも、データの結合と条件抽出を同時に実行するので、使い方が難しいと感じる方も多いでしょう。しかし、うまく組み合わせることで簡潔で、しかも早く処理できるSQLが作れます。

    INNER JOINで結合した具体的なリストをイメージし、さらに、他のテーブルと結合するなどして、効率の良いSQLを作れます。ぜひ、今回ご紹介した内容を参考に、INNER JOINの使い方をマスターしてください。


    ポテパンが提供するサービスについて

    本メディア「ポテパンスタイル」を運営する株式会社ポテパンは、エンジニアキャリア領域で複数サービスを提供しています。

    ポテパンフリーランス

    ポテパンフリーランス

    フリーランスエンジニアの方に高単価案件をご紹介しております。弊社ではフリーランス案件を常時300件ほど保有しており、その中からあなたに適した案件をご案内いたします。また、これから独立してフリーランスになる方の無料個別相談も承っております。フリーランスになった後の案件獲得方法やお金面(税金や保険など)についてお答えいたします!フリーエンジニアになりたい方向けのコンテンツも盛りだくさんです。

    ポテパンキャリア

    ポテパンキャリア

    エンジニア職専門の転職エージェントです。ポテパンキャリアでは、技術のわかるエージェントがあなたの転職をサポートします。エージェント自身がエンジニアなので、あなたと同じ目線で仕事内容や今後のキャリアについて一緒に考えることができます。年収800万円以上のハイスペック転職をご希望の方は「ポテパンプロフェッショナル」もご用意しておりますのでご利用下さいませ。

    ポテパンキャンプ

    ポテパンキャンプ

    ポテパンキャンプでは、RubyにてゼロからオリジナルのECサイトを作り上げてる3ヶ月間の実践型カリキュラムを提供しております。すでに本スクールの卒業生は、エンジニア職として様々な企業様に就職しております。なお、本スクールは受講料25万円と他社スクールに比べ格安となっており、またポテパンからご紹介させていただいた企業へ就職が決まった場合は、全額キャッシュバックいたします。



    株式会社ポテパンは、企業とエンジニアの最適なマッチングを追求しています。気になるサービスがあれば、ぜひ覗いてみてください!

    ポテクラバナー ポテプロバナー

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア

    関連ワード

    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE

    ポテパンおすすめ案件