UI設計したり、ウェブシステムを開発したりします。 

SQL見るだけクエリ#003 INNER JOIN でテーブル結合してみる

記入日:2022-12-23 編集日:2022-12-23

SQL見るだけクエリ。今回は2つのテーブルをINNER JOINという方法で結合してみます。

この記事を読むと(約3分)
データベース内のあるテーブルと別のテーブルを結合する際に、どのようなプログラムを書いているかが分かります。LEFT JOIN(外部結合の一つ)と、INNER JOIN(内部結合)の違いも分かります。

以下の様な2種類のテーブルを用意しました。

テーブル名:sample_note

idtittledatemember_idlinestatus
1AAAAA2022-12-261501
2BBBBB2022-12-272501
3CCCCC2022-12-283501
4DDDDD2022-12-29500
5EEEEE2022-12-301501

テーブル名:sample_member

idnamelinestatus
1一ノ瀬501
2二宮501
3三小田501
4志村500
5後藤501

テーブルの情報を取得するSQLに関して、注目する部分は、以下の9~11行目のみです。

SELECT a.id,a.tittle,a.member_id,b.name FROM sample_note AS a INNER JOIN sample_member AS b ON a.member_id = b.id この部分で、データベース内にあるsample_noteという名前のテーブルとsample_memberという名前のテーブルを結合しながらレコード(保存された内容)を取得しております。

try {
    include_once '../model/class.php';

    // データベース接続
    $database = new Database();
    $db = $database->connect();

    // SQLを準備し、パラメータをバインドする
    $query = 'SELECT a.id,a.tittle,a.member_id,b.name FROM sample_note AS a
    INNER JOIN sample_member AS b
    ON a.member_id = b.id';
    $stmt = $db->prepare($query);

    // 実行する
    $stmt->execute();

    // 結果を取得する
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
    print_r($result);

    // データベースから切断する
    $database->disconnect();

} catch(PDOException $e) {
    echo $e->getMessage();
}

これを実行すると、二次元連想配列という形式で、結合された情報を取得することができます。

            Array
(
    [0] => Array
        (
            [id] => 1
            [tittle] => AAAAA
            [member_id] => 1
            [name] => 一ノ瀬
        )

    [1] => Array
        (
            [id] => 2
            [tittle] => BBBBB
            [member_id] => 2
            [name] => 二宮
        )

    [2] => Array
        (
            [id] => 3
            [tittle] => CCCCC
            [member_id] => 3
            [name] => 三小田
        )

    [3] => Array
        (
            [id] => 5
            [tittle] => EEEEE
            [member_id] => 1
            [name] => 一ノ瀬
        )

)
			

見やすくする為に、HTMLとCSSで体裁を整えると、以下のようになります。

メンバーの名前を別テーブルよりINNER JOIN

id tittle member_id name
1
AAAAA
1
一ノ瀬
2
BBBBB
2
二宮
3
CCCCC
3
三小田
5
EEEEE
1
一ノ瀬

前回のノートで記載したLEFT JOINでの結合と今回のINNER JOINでは、SQL自体は非常によく似ていますが、結果が異なります。
ちなみにLEFT JOINは外部結合という種類の1つで、INNER JOINは内部結合と言います。 今回利用した、内部結合であるINNER JOINは、結合するもの同士のペアが成立しているものみ結合する仕組みになっています。 よって、今回のテーブルですと、sample_noteのmember_idとample_memberのidが、一致するもののみを結合して取得している事になります。


  • sample_noteのid-=4のレコードは、member_id=空欄 なのでペアなし
  • sample_memberのid=5のレコードは、sample_noteのレコードにmember_id=5のものがないのでペアなし

といった具合になります。

SQLの使いどころ

サイトに大量の情報を掲載することは、ユーザーにとってとても便利なことです。しかし、情報が多すぎると、目的の情報を見つけるのが困難になります。そのため、SQLを使用することで、情報を効率的に管理することができます。

SQLを使用することで、データベース内の情報を検索したり、フィルタリングしたりすることができます。これにより、ユーザーは目的の情報をスムーズかつ簡単に見つけることができます。

また、SQLを使用することで、データを集計したり、統合したりすることもできます。これにより、ユーザーはさまざまな視点から情報を分析することができます。つまり、サイトに多くの情報を掲載することが重要である一方で、その情報を効率的かつ簡単に管理することが求められる場合には、SQLが不可欠であるといえます。

KK

機械工学を専攻。工業デザイナーとして、国内及び海外の自動車・搬送ラインの設計などに従事した後、2003年にウェブシステム会社を設立。UI設計やウェブシステムの開発、DX化のディレクションなどを行っています。