単一テーブルでは足りない時:なぜ結合(JOIN)が必要なのか?

前章では、単一テーブル(例えばusersテーブル)からデータを取得する方法を学びました。これはExcelでワークシートを開き、フィルタを使ってデータを探すのと同じくらい簡単です。

しかし実務の世界では、データは極めて複雑です。 大規模なECサイト(PChomeやShopeeなど)を想像してください。そのデータが全て1つのテーブルに収まるはずがありません。なぜでしょうか? 「会員名、メールアドレス、商品名、商品価格、購入数量、配送先住所」を全て1つのテーブルに記録すると、同じ会員が100回購入した場合、その会員の名前とメールアドレスが100回重複して記録されます。これはストレージの無駄遣いであるだけでなく、会員が名前を変更した場合、100件のデータを一括更新する必要があり、ミスが発生しやすくなります!

そこでリレーショナルデータベース(Relational Database)は最も偉大な設計を発明しました:データを複数のテーブルに分割し、「鍵(Key)」でそれらを関連付けるという方法です。

  • 会員テーブル(users):会員基本情報を格納。各会員には一意のID(id)がある
  • 商品テーブル(products):商品カタログを格納。各商品には一意のID(id)がある
  • 注文テーブル(orders):これが核心!注文テーブルには会員名も商品名も「保存しない」。user_idproduct_idだけを保存する

「誰が何を買ったか」の完全なレポートを作成する必要がある時、データベースにこれら3つのテーブルを「結合する」よう指示する必要があります。この操作がSQLにおけるJOINです。


4つの主要なJOINパターン(暗記不要、AIがサポート)

Vibe Coding時代では構文を丸暗記する必要はありませんが、JOINの概念を理解することで、AIにより正確なPromptを指示できます。

  1. INNER JOIN(内部結合):最も一般的。両テーブルにデータがある場合のみ取得。「購入歴のある会員を抽出」
  2. LEFT JOIN(左外部結合):左テーブルを基準。右に対応データがなくても左のデータは全て表示。「全会員をリストアップし、購入があれば注文情報を、なければ注文欄を空白表示」
  3. RIGHT JOIN(右外部結合):LEFT JOINの逆で、右テーブルを基準
  4. FULL OUTER JOIN(完全外部結合):両テーブルのデータを全て取得。対応がない場合はNULLを表示

Vibe Prompt:AIに最適なJOIN構文を書かせる

テーブル関係を平易な言葉で説明するだけで、AIが瞬時にJOIN構文を作成します。

【高度な関連レポートPrompt】 以下の3テーブルがあります:

  1. users (id, name, email)
  2. products (id, title, price)
  3. orders (id, user_id, product_id, quantity, created_at)

「全ての注文明細」をリストアップするSQLを書いてください。 レポートには以下を表示:注文ID、購入会員名(name)、購入商品名(title)、購入数量(quantity)、注文総額(price * quantityをtotal_amountとして計算)。 最後に、新しい順に並べ替えてください。

AIが生成した完璧なSQL:

SELECT 
    o.id AS order_id,
    u.name AS user_name,
    p.title AS product_name,
    o.quantity,
    (p.price * o.quantity) AS total_amount,
    o.created_at
FROM 
    orders o
INNER JOIN 
    users u ON o.user_id = u.id
INNER JOIN 
    products p ON o.product_id = p.id
ORDER BY 
    o.created_at DESC;

(見てください!AIが自動的にINNER JOINで3テーブルを結合し、総額計算式まで書いてくれました!)


グループ演算(GROUP BY)とピボット分析

テーブル結合に加え、データ分析で最もよく行うのが「集計とグループ化」です。これはExcelの「ピボットテーブル」に相当します。

例えば、上司があなたのデスクに来て「先月の商品別販売数量と総売上、最も利益が出た商品は?」と質問したとします。

Excelでピボットテーブルを作成すると時間がかかりますが、SQLの世界では**GROUP BY(グループ化)集計関数(SUM, COUNT, AVGなど)**で簡単に解決できます。

Vibe Prompt:瞬時にビジネスレポートを生成

【商品売上分析Prompt】 先程のordersproducts構造に基づき、SQLを書いてください。 「商品ごと」の「総販売数量」と「総売上」を集計してください。 総売上高い順に並べ替え、最も収益性の高い商品が一目で分かるようにしてください。

AIが生成した優れたレポートSQL:

SELECT 
    p.title AS product_name,
    SUM(o.quantity) AS total_sold_quantity,
    SUM(p.price * o.quantity) AS total_revenue
FROM 
    products p
LEFT JOIN 
    orders o ON p.id = o.product_id
GROUP BY 
    p.id, p.title
ORDER BY 
    total_revenue DESC NULLS LAST;

SupabaseのSQL Editorでこのコードを実行すると、非常に見やすいレポートが得られます:

  1. 人間工学AIチェア | 販売数5 | 総売上60000
  2. Vibeプレミアムメカニカルキーボード | 販売数12 | 総売上42000

Vibe CodingとSQLの強力な組み合わせにより、何十万件ものデータに圧倒される心配はもうありません。質問の仕方さえ分かれば、AIが明確に答えを計算してくれます!次章では、より高度な課題「データベースでユーザーパスワードを保護する方法」に挑戦します!

完全なチュートリアルをロック解除

このチャプターは有料コンテンツです。プロジェクトに参加して、10以上の神レベルのPromptや実際のソースコード例を含む、5000字以上の深い分析をロック解除してください!