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

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

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

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

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

以下の様な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 LEFT 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
    LEFT 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] => 4
            [tittle] => DDDDD
            [member_id] => 
            [name] => 
        )

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

)
			

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

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

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

id=4のDDDDDの行はnameが空欄のままです。これは、そもそもmember_idの欄が空欄だった為、連結する為のキーが存在しませんでした、LEFT JOINでは、その場合、行としては生成しますが、連結するものは何もなく、空欄のまま表示される事になります。


結合する前までは、sample_noteテーブルには、メンバーの表記は数字でしか保存されていませんでしたが、この数字をキーにして、sample_memberテーブルのnameを連結する事によって、名前の表記も載った表を作成する事が可能になりました。このようなテーブル間のリレーションはシステム内でとても頻繁に登場します。

SQLの使いどころ

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

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

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

KK

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