リレーショナルを実現するSQLのコマンド、LEFT OUTER JOINを徹底解説
  • facebookページ
  • twitterページ
  • 2019.11.02

    リレーショナルを実現するSQLのコマンド、LEFT OUTER JOINを徹底解説

    SQLにおいて、リレーショナルに基づいてリストを作る機能と言えばJOINですが、中でも頻度の高いコマンドがLEFT OUTER JOINです。今回は、このLEFT OUTER JOINの基本と応用例をご紹介します。

    最もリレーショナルデータベースらしいSQLのコマンド

    今使われている多くの情報システムでデータベースが使われています。そして、それらの多くがリレーショナルデータベースに分類される管理ソフトであり、その操作にはSQLが使われます。そして、今回解説するLEFT OUTER JOINは、SQLの機能の中でも、データ間のリレーショナルを活用するコマンドの一つです。そこでコマンドの解説の前に、リレーショナルデータベースのリレーショナルとは何かについて解説します。

    そもそもリレーショナルデータベースとは

    SQLを習ったことのある方なら習ったことがあると思いますが、リレーショナルデータベースとは、表形式のテーブルに情報を格納し、情報の関係(リレーショナル)を使って情報を管理するデータベースです。

    そのため、どのような情報を格納するか、また、どういった形式で情報を取り出すかを考える際、Excelなどの表計算ソフトで扱う表をイメージすると解りやすいでしょう。

    また、情報の関係は、複数のテーブルに同じ情報を格納しておくと、その情報を使って複数のテーブルに分散して格納された情報を結合して取り出すの際に利用できます。そして、その機能を使ったデータベースが今使われているリレーショナルデータベースという訳です。

    関係性を使って結合するということ

    リレーショナルデータベースの関係性をもう少し具体的に説明してみましょう。

    リレーショナルデータベースでは、データは表形式で格納されていますが、下記のような2つの表があったとします。そして、table1のsec_id列に格納される数字は、table2のsec_idの列に格納される数字に対応しているとします。

    table1の要素
    id name sec_id
    1 鈴木 3
    2 佐藤 3
    3 田中 1

    table2の要素
    sec_id section
    1 総務
    2 経理
    3 営業

    この場合、table1とtable2の2つの表のsec_idが同じ数字のデータを関連付けすれば、下記のような表が作れます。これが、関係性を使って表を結合するということです。

    sec_idの関係を使ってtable1とtable2結合した表
    id name sec_id section
    1 鈴木 3 営業
    2 佐藤 3 営業
    3 田中 1 総務

    今回紹介するLEFT OUTER JOIN は、上記のような2つの表を結合するSQLのコマンドの一つです。

    ベースとなる左側に接続するのがLEFT OUTER JOIN

    今回解説するLEFT OUTER JOINは、OUTER JOIN、つまり外部結合の一種で、左側のテーブルのデータを使うという機能です。基本的な使い方を次に紹介します。

    SQLのSELECT文のFROM句の中で使用し、LEFT OUTER JOINの左側のテーブル(上のSQLでは表1)のデータを全て使う。そして、LEFT OUTER JOINの右側のテーブル(上の例では表2)のデータのうち、ON以降に記載された条件(上の例では表1.要素名 = 表2.要素名)に一致するデータのみ取ってくる。

    そして、LEFT OUTER JOINで作成されるリストは、左側の列に必ずデータが入るので、ファイルに出力してExcelなどの表計算で加工したり、プログラムに取り込まれて処理される際に都合が良いことから、SQLでよく使われるコマンドです。

    LEFT OUTER JOINの基本的な使い方

    先ほど、LEFT OUTER JOINの基本的な使い方をご紹介しましたが、SELECT文で作られるリストは、2つのテーブルを結合した単純なものばかりではありません。次に、実際のSQLでもよく見かけるLEFT OUTER JOINの使い方をご紹介します。

    複数のテーブルを結合する場合

    実際のシステムでは、データベースを構成するテーブルが数十ある、というケースも珍しくありません。そのため、データベースから出力されるリストは、幾つものテーブルからリレーショナルを活用して必要なデータを結合して作られるのが普通です。

    LEFT OUTER JOINで接続できるテーブルは2つだけですが、扱えるのは既存のテーブルだけではありません。SQLでは、SELECT文のFROM句に入れ子でなら複数のLEFT OUTER JOINを記述できます。

    次の例は、3つの表を結合する例です。

    この例では、まず、T1とT2の2つのテーブルを結合して新しいテーブルを作り、さらにT3を結合しています。なお、括弧は省略しても良いので、次のようにも書けます。

    複数の結合条件を使用する場合

    LEFT OUTER JOINで結合する際、続くON句に複数の条件を記述することも可能です。そして、複数の条件を設定する場合は、ANDやORを利用します。

    この例では、T1テーブルのT2テーブルのidとflgの両方が一致している場合のみ、T2のデータをT1に接続します。

    新たに作ったテーブルをwhere句で絞り込む

    単独のテーブルから条件で絞ってリストを作る場合、SQLではwhere句が使われますますが、LEFT OUTER JOINで作ったリストに対してwhere句を適用し、条件で絞ったリストを作ることも可能です。

    この例では、LEFT OUTER JOINでT1とT2を結合した新しいテーブルに対して、where T1.flg = 1を適用し、条件で絞ったリストを出力します。なお、処理の順番は、まず、FROM句で新しいテーブルを作り、次にWHERE句で条件で絞る処理となります。データの数が多い場合は、処理に時間がかかる原因にもなるので使う場合は注意が必要です。

    リスト作成の高速化のポイント

    SQLのJOINで2つのテーブルを結合する際、そのテーブルが大きい場合は特に処理に時間がかかります。しかし、JOINで結合するテーブルが、予め必要なデータだけ抽出しておけば、処理時間を短縮できます。次に、そのようなJOINによるリスト作成の高速化について解説します。

    副次問い合わせを活用する

    データ量の多いテーブルに、同じくテータ量の多いテーブルを結合すると、それだけで処理に時間がかかります。そのため、予め副次問い合わせで必要なデータだけを抽出し、それを結合すれば処理時間の短縮が可能です。

    なお、副次問い合わせとは、SELECTを使ったSQL文の中、入れ子でSELECTを使ったSQL文を入れる使い方で、SQLではよく使われる機能です。例えばSQLは、プログラムのように、リストに対して前処理を適用し、その後にそのリストを加工する、といったことはできません。しかし、副次問い合わせを使えば、そういったプログラムのような処理が可能です。

    今回紹介しているLEFT OUTER JOINでも、副次問い合わせの結果作られたリストを結合できるので、ぜひ、利用してください。

    INNER JOINを組み合わせる

    LEFT OUTER JOINで結合できるリストは、副次問い合わせで作成したリストだけではありません。他のJOIN句で結合したリストも対象にできます。そして、ぜひ、使ってほしいのが、INNER JOINで結合したリストです。

    INNER JOINは、OUTER JOINと同じように、2つのテーブルを結合する機能ですが、リストに加えるのは条件に一致したデータのみです。そのため、結合と抽出を同時に実現できます。ぜひ、今回紹介するLEFT OUTER JOINとINNER JOINを組み合わせた使い方もマスターしましょう。

    複雑なリストを作るならLEFT OUTER JOINをマスターしよう

    Webシステムのプログラムからデータベースを利用するにしても、SQLでプログラムで処理しやすいリストを作れれば、処理を簡略化できます。そして、SQLでリストを作る機能がJOIN句であり、よく使われるのがLEFT OUTER JOINです。

    さらにLEFT OUTER JOINでリストを作成する際、副次組み合わせや他のJOIN句を組み合わせることで、かなり複雑なリストの作成も可能です。ぜひ、これまで解説した記事を参考に、データベースの基本であるデータのリレーショナルを使って複雑なリストを作成できるLEFT OUTER JOINの使い方をマスターしましょう。


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

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

    ポテパンフリーランス

    ポテパンフリーランス

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

    ポテパンキャリア

    ポテパンキャリア

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

    ポテパンキャンプ

    ポテパンキャンプ

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



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

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

    この記事をシェア

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

    関連ワード

    pickup









    ABOUT US

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

    READ MORE

    ポテパンおすすめ案件