1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【MySQL】INNER JOINとOUTER JOINの違い

1
Posted at

はじめに

複数のテーブルからデータを取得するために、JOINを使ってSQL文を書きました。その際、内部結合(INNER JOIN)と外部結合(OUTER JOIN)の違いについて調べたのでまとめておきます。

内部結合(INNER JOIN)とは

2つ以上のテーブルから関連するデータのみを取得します。内部結合では、指定した条件に一致する行だけが結果セットに含まれます。つまり、結合条件に一致しない行は結果に含まれません。

使うべき場面

  • 2つのテーブルの間で共通のデータが存在する時
  • 両方のテーブルに存在するデータのみを取得したいとき

例えば、2つのテーブル orders と customers があるとします。orders テーブルには注文情報が、customers テーブルには顧客情報が含まれています。顧客とその注文を取得したいときに内部結合を使います。

SELECT orders.order_id, customers.customer_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;

外部結合(OUTER JOIN)とは

左外部結合(LEFT JOIN)と右外部結合(RIGHT JOIN)があります。外部結合は、一方のテーブルに存在するすべてのデータと、もう一方のテーブルに一致するデータを取得します。

左外部結合(LEFT JOIN)の場合、FROM後のテーブルのデータ全てとLEFT JOIN後の一致する行を取得します。一致しないLEFT JOIN後テーブルの行にはNULLが入ります。右外部結合(RIGHT JOIN)の場合はその逆です。

使うべき場面

*あるテーブルのすべてのデータと、関連する他のテーブルのデータを取得したいとき
*片方のテーブルのすべてのデータが必要なとき

例えば、すべての顧客とその顧客が注文した情報を取得します。注文がない顧客も結果に含まれます。

SELECT customers.customer_name, orders.order_id
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id;

まとめ

いかがだったでしょう?
OUTER JOINとINNER JOINの違いを理解していなかった私は、必要なデータを取得できなかったり、意図しないデータが反映されてしまっていました。
この記事を書くことで少しでも皆さんの役に立てたら幸いです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?