{category}

PHP - SQL応用

JOIN

ジョイン(データベースとSQL

意味 複数テーブルの結合


JOINとは?

JOINは、SQLの機能の一つで、複数のテーブルを結合して一つの結果セットを作成するために使用します。これにより、異なるテーブルに分散されているデータを組み合わせて、より複雑な情報を取得できます。

JOINの具体的な使い方

INNER JOINの例

$query = 'SELECT users.name, orders.product, orders.order_date
FROM users
INNER JOIN orders ON users.id = orders.user_id
ORDER BY orders.order_date DESC
LIMIT 5';

$stmt = $pdo->query($query);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo "{$row['name']}さんが{$row['order_date']}に{$row['product']}を注文しました。\n";
}

👇出力結果

田中さんが2023-06-01にiPhoneを注文しました。
佐藤さんが2023-05-30にMacBookを注文しました。
鈴木さんが2023-05-29にAirPodsを注文しました。
高橋さんが2023-05-28にiPadを注文しました。
渡辺さんが2023-05-27にApple Watchを注文しました。

この例では、usersテーブルとordersテーブルをINNER JOINで結合しています。ユーザーの名前、注文した商品、注文日を取得し、注文日の新しい順に5件表示しています。INNER JOINは両方のテーブルで一致するデータのみを返すため、注文のあるユーザーのみが結果に含まれます。

LEFT JOINを使用した集計の例

$query = 'SELECT categories.name AS category, COUNT(products.id) AS product_count
FROM categories
LEFT JOIN products ON categories.id = products.category_id
GROUP BY categories.id
ORDER BY product_count DESC';

$stmt = $pdo->query($query);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo "{$row['category']}カテゴリには{$row['product_count']}個の商品があります。\n";
}

👇出力結果

電子機器カテゴリには15個の商品があります。
食品カテゴリには12個の商品があります。
衣類カテゴリには8個の商品があります。
書籍カテゴリには5個の商品があります。
家具カテゴリには0個の商品があります。

この例では、LEFT JOINを使用してcategoriesテーブルとproductsテーブルを結合し、各カテゴリーに属する商品の数を集計しています。LEFT JOINを使用することで、商品が登録されていないカテゴリーも結果に含まれます。GROUP BY句で各カテゴリーごとに集計し、ORDER BY句で商品数の多い順にソートしています。

JOINに関するよくある質問

Q. JOINの種類にはどのようなものがある?
A. 主なJOINの種類には、INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOINがあります。INNER JOINは両方のテーブルに一致するデータのみを返し、LEFT JOINは左テーブルの全データと右テーブルの一致するデータを返します。RIGHT JOINはその逆で、FULL OUTER JOINは両方のテーブルの全データを返します。
Q. JOINを使わずにサブクエリで代用できる?
A. 多くの場合、JOINの代わりにサブクエリを使用することができます。しかし、JOINの方がパフォーマンスが良いことが多いです。特に大量のデータを扱う場合、JOINの方が効率的に処理できることが多いです。
Q. JOINの結合条件を間違えるとどうなる?
A. 結合条件を間違えると、意図しないデータの組み合わせが生成される可能性があります。これはカーテシアン積と呼ばれ、結果セットが非常に大きくなる可能性があります。常にON句で正しい結合条件を指定することが重要です。

JOINが学べる書籍の紹介

「プログラミング単語帳」を使って、プログラミングの単語を英単語のように学習してみませんか?
プログラミング単語帳には、PHPのJOINやPDOStatement::fetchAll()、外部キー、HAVING、などのような実務でよく使われる単語が数百以上収録されています。
この書籍には、プログラミングの単語の意味や読み方、単語の使い方がわかる例文などが掲載されており、いつでもどこでもプログラミングの学習ができます。

よく使われる単語にだけ絞って学習することができるので、効率的にプログラミングが学習できます。

1日5分の暗記でプログラミンが身に付く!プログラミング単語帳 公式ストアで発売中!

HTML編、CSS編、JavaScript編、PHP編、Ruby編、その他単語編の6シリーズ分が公式ストアにて販売中です。気になった方はぜひ購入してみてください。


PHPを学べる「プログラミング単語帳」アプリ

プログラミング単語帳がアプリになりました!PHPはもちろん、10種類のプログラミング言語の中から、よく使われる単語をスマホで学習できます。

収録単語は2,000単語以上!
現在は、HTML、CSS、JavaScirpt、PHP、Laravel、Ruby、Python、MySQL、Linux、など10カテゴリーの単語帳が1つのアプリに収録されています。

いつでも、どこでも、隙間時間を有効活用して、プログラミングを効率的に学べるので、ぜひダウンロードしてみてください。

2024年7月アップデート情報:「Laravel」カテゴリーが追加されましました!

2024年8月アップデート情報:「MySQL」「Linux」カテゴリーが追加されましました!


関連するそのほかの単語

PDOStatement::fetchAll()

全ての結果行を取得

種類: PDO

外部キー

テーブル間の関連付け

種類: データベース設計

HAVING

グループ化後の条件指定

種類: SQL応用

//

1行コメントの記述

種類: コメント

mb_strlen()

マルチバイト文字列の長さを取得

種類: マルチバイト文字列