メインコンテンツへスキップ

VillageSQL is a drop-in replacement for MySQL with extensions.

All examples on this page work on VillageSQL. Install Now →
RIGHT JOIN は、一致するかどうかにかかわらず、右側のテーブルのすべての行を 保持します。これは LEFT JOIN の鏡像であり、 LEFT JOIN にできないことは何もしないため、このレッスンは短いものです。 このレッスンがあるのは、他の人の SQL でこれを読むことになるからです。 始める前に、mysql -u root -p sakila でクライアントを開いてください。

RIGHT JOIN の仕組み

COLUMN_LIST を欲しい列に、LEFT_TABLE を起点にするテーブルに、 RIGHT_TABLE をすべての行を保持したいテーブルに、各 COLUMN_NAME を その側で両者をつなぐ列に置き換えます。何にも一致しない右側の行は、左側の テーブルのすべての列が NULL になって返ります。RIGHT OUTER JOIN は同じ句を 省略せずに綴ったものです。

例

  1. 2 番目のテーブルのすべての行を保持する

film が左側で language が右側なので、これは 6 つの言語すべてを保持します。
1,005 行です。LEFT JOIN のレッスンが同じ 2 つのテーブルを逆の順序で結合して 得たのと同じ行数です。

  1. 何にも一致しなかった行を一覧にする

左結合と同じパターンですが、今度は NULL のテストが左側のテーブルに対して 行われます。
どの映画にも使われていない 5 つの言語です。

すべての RIGHT JOIN は LEFT JOIN として書ける

a RIGHT JOIN b は b LEFT JOIN a と同じ行を返します。2 つのテーブル名を 入れ替え、キーワードを入れ替えても、答えは変わりません。SELECT * では列が 異なる順序で返ります。* は FROM にテーブルが現れる順序で展開されるため です。順序が重要なら、列名を明示してください。 あなたが読む SQL のほとんどは、その理由から LEFT JOIN で書かれています。 クエリ内のすべての結合が同じ方向に傾いていると、クエリは追いやすくなります。 WHERE の罠を含め、これに関する他のすべては、LEFT JOIN のレッスンが説明するとおりに、左と右を入れ替えた形で動作します。

まとめ

  • 2 番目に名前を挙げたテーブルのすべての行を保持するには RIGHT JOIN を使います。
  • 何にも一致しなかった行では、左側のすべての列が NULL になると考えてください。
  • a RIGHT JOIN b は b LEFT JOIN a として読み、* を使うのではなく列名を明示します。
  • 自分が書く SQL では LEFT JOIN を優先し、クエリ内の結合がすべて同じ方向に傾くようにします。

関連項目