テーブル結合とは?
複数のテーブルに散らばっているデータを、ある共通の項目(キー)を基に一つにまとめることをテーブル結合といいます。例えば、顧客情報と注文情報が別々のテーブルに保存されている場合、顧客IDをキーとして両方のテーブルを結合することで、どの顧客がどの商品を注文したかといった情報を一括で取得することができます。
JOINの基本的な書き方
SELECT *
FROM テーブル1
JOIN テーブル2 ON テーブル1.キー = テーブル2.キー;
- SELECT: 結合結果から表示するカラムを指定します。
- FROM: 結合するテーブルを指定します。
- JOIN: 結合の種類を指定します。(INNER JOINが省略時のデフォルト)
- ON: 結合条件を指定します。
JOINの種類
JOINには、大きく分けて以下の種類があります。
- INNER JOIN: 両方のテーブルに存在するデータのみを結合します。
- LEFT OUTER JOIN: 左側のテーブルの全ての行を返し、右側のテーブルに該当する行があれば結合します。
- RIGHT OUTER JOIN: 右側のテーブルの全ての行を返し、左側のテーブルに該当する行があれば結合します。
- FULL OUTER JOIN: 両方のテーブルの全ての行を返し、該当する行があれば結合します。
各JOINの種類と使用例
INNER JOIN
SELECT customers.name, orders.product_name
FROM customers
INNER JOIN orders ON customers.customer_id = orders.customer_id;
- 顧客名と注文した商品名を結合して表示します。
- 両方のテーブルに存在するデータのみが抽出されます。
LEFT OUTER JOIN
SELECT customers.name, orders.product_name
FROM customers
LEFT OUTER JOIN orders ON customers.customer_id = orders.customer_id;
- 全ての顧客を表示し、注文履歴がある場合は商品名を表示します。
- 注文履歴がない顧客も表示されます。
RIGHT OUTER JOIN
SELECT customers.name, orders.product_name
FROM customers
RIGHT OUTER JOIN orders ON customers.customer_id = orders.customer_id;
- 全ての注文を表示し、注文した顧客名が分かっている場合は表示します。
- 顧客情報がない注文も表示されます。
FULL OUTER JOIN
SELECT customers.name, orders.product_name
FROM customers
FULL OUTER JOIN orders ON customers.customer_id = orders.customer_id;
- 両方のテーブルの全ての行を表示し、該当する行があれば結合します。
- 顧客情報がない注文や、注文履歴がない顧客も表示されます。
複数のテーブルを結合する
複数のテーブルを結合する場合は、JOINを連鎖して使用します。
SELECT customers.name, products.product_name, orders.order_date
FROM customers
INNER JOIN orders ON customers.customer_id = orders.customer_id
INNER JOIN products ON orders.product_id = products.product_id;
まとめ
テーブル結合は、複数のテーブルに分散しているデータを関連付けて一元的に扱うための重要なSQLの機能です。JOINの種類を使い分けることで、様々な種類のデータ分析が可能になります。
さらに詳しく学びたい方へ
- 自己結合: 同じテーブルを自分自身と結合する
- サブクエリ: SELECT文の中に別のSELECT文を組み込む
- ビュー: 複雑な結合クエリを一つのビューとして定義する
コメント