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_idNATURAL 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フィードバックを取得できます。ローカル設定は不要です。