0Pricing
SQL Academy · レッスン

INNER JOINの仕組み

INNER JOINを絞り込まれた直積として理解し、結合条件を記述し、結合に関するEXPLAINの出力を読み取ります。

「INNER JOINの仕組み」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。

INNER JOIN

INNER JOINは、ON条件に基づいて、両方のテーブルに対応する組み合わせがある行だけを返します。

基本的なINNER JOIN

各注文をユーザーとともに取得します:

SELECT o.id, o.total, u.email
FROM orders o
INNER JOIN users u ON u.id = o.user_id;

-- INNER is the default — you can also write:
SELECT o.id, o.total, u.email
FROM orders o
JOIN users u ON u.id = o.user_id;

ONで複数の条件を指定する

ON句には通常のブール式を記述できます:

SELECT *
FROM events e
JOIN sessions s
  ON s.user_id = e.user_id
 AND e.created_at BETWEEN s.start_at AND s.end_at;

エイリアス

エイリアスを使うとクエリが短くなり、あいまいな列参照を避けられます:

SELECT o.id, u.email
FROM orders AS o          -- AS is optional
JOIN users  AS u ON u.id = o.user_id;

3つ以上のテーブルを結合する

JOIN句を繰り返して、結合を連鎖させます:

SELECT o.id, u.email, p.name AS product
FROM orders   o
JOIN users    u ON u.id = o.user_id
JOIN products p ON p.id = o.product_id;

USING (column)

結合列の名前が両方のテーブルで同じ場合は、USINGを記述できます。出力に同じ列が重複して表示されるのを防げます:

SELECT o.id, total, email
FROM orders
JOIN users USING (user_id);   -- requires both tables to have user_id

NATURAL JOIN

同じ名前を持つすべての列で結合します。列が追加されると壊れやすいため、注意してください。

-- Avoid in production code:
SELECT * FROM orders NATURAL JOIN users;

JOIN条件とWHERE

INNER JOINでは、ONに記述した条件とWHEREに記述した条件は、論理的には同等です。慣例として、JOINの関係を定義する条件はONに、行のフィルタ条件はWHEREに記述します。

SELECT * FROM orders o
JOIN users u ON u.id = o.user_id   -- join condition
WHERE u.country = 'US';            -- row filter

結果の増加

Aの1行がBの3行に一致すると、結果には3行が含まれます。これは正常な動作ですが、忘れていると意外な結果になります。集約する場合は、COUNT(*)を慎重に使用してください。

自己結合のプレビュー

各インスタンスに異なるエイリアスを付けることで、テーブルを自身と結合できます:

SELECT e.full_name AS employee, m.full_name AS manager
FROM employees e
JOIN employees m ON m.id = e.manager_id;

INNER JOINのパフォーマンス

INNER JOINは、次の条件を満たすと高速です:

  • 結合列にインデックスがある(特に外部キー側)
  • 一方のテーブルが小さい(ハッシュ結合)か、両方がソート済みである(マージ結合)
  • 早い段階で絞り込み、中間結果の行数を少なくする

まとめ

INNER JOINは一致する組み合わせだけを残します。

  • JOINはデフォルトでINNER JOINです
  • ONで結合条件を表します
  • エイリアスでクエリを短く保てます
  • 結合列にはインデックスを付けるべきです

確認問題

注文に一致するユーザーがいない場合(孤立した注文)、orders INNER JOIN users ON users.id = orders.user_idは何を返しますか?

よくある質問

「INNER JOINの仕組み」レッスンは無料ですか?

はい。「INNER JOINの仕組み」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。

「INNER JOINの仕組み」で何を学びますか?

INNER JOINを絞り込まれた直積として理解し、結合条件を記述し、結合に関するEXPLAINの出力を読み取ります。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

SQL Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「INNER JOINの仕組み」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSQL Academyレッスンでコードを書いて実行できますか?

はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. なぜJOINが必要か(リレーショナルモデルの復習)
  2. INNER JOINの仕組み
  3. LEFT/RIGHT JOINとOUTER JOIN
  4. 自己結合と別名
← SQL Academyに戻る