0
0

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.

SQLでよく利用されるJOIN句の使用例

Last updated at Posted at 2023-12-17

はじめに

データベースクエリにおいて、JOIN句は異なるテーブル間でデータを結合するための不可欠なツールです。ここでは、よく使用される3つのSQL JOIN句の基本的な使用法を紹介し、新たなテーブルの作成手順も説明します。

1. 内部結合 (INNER JOIN)

INNER JOINは2つのテーブルから共通の値を持つ行を結合するために使用されます。これは、関連するデータを結合し、一致する行を取得するために使用されます。例えば、商品情報を価格情報と結合するケースを考えてみましょう。

SELECT  #4.以下のカラムを取得する
  products.product_name,
  products.category,
  prices.price
FROM #1.productsテーブルと
  products
INNER JOIN #2.pricesテーブルが
  prices
ON #3.product_idで一致する場合、結合して
  products.product_id = prices.product_id;
  
#以下イメージ
products テーブル:

| product_id | product_name | category    |
|------------|--------------|-------------|
| 1          | 商品A        | カテゴリ1   |
| 2          | 商品B        | カテゴリ2   |
| 3          | 商品C        | カテゴリ1   |

prices テーブル:

| price_id | product_id | price  |
|----------|------------|--------|
| 101      | 1          | 10.99  |
| 102      | 2          | 15.49  |
| 103      | 3          | 8.99   |

結合結果:

| product_name | category   | price  |
|--------------|------------|--------|
| 商品A        | カテゴリ1  | 10.99  |
| 商品B        | カテゴリ2  | 15.49  |
| 商品C        | カテゴリ1  | 8.99   |

2. 左外部結合 (LEFT JOIN)

左外部結合 (LEFT JOIN) は、左側のテーブルの全ての行を保持し、右側のテーブルとの共通の値を持つ行を結合します。共通の値が右側のテーブルに存在しない場合、欠損値が生成されます。顧客情報と注文情報を結合するケースを考えてみましょう。

#顧客情報、注文情報、注文詳細情報を結合し、顧客名、注文日時、注文金額を取得します
SELECT
  a.customer_name,   -- 顧客名
  b.order_date,      -- 注文日時
  c.order_amount     -- 注文金額
FROM
  customers AS a
LEFT JOIN
  orders AS b
ON
  a.customer_id = b.customer_id
LEFT JOIN
  order_details AS c
ON
  b.order_id = c.order_id;

#以下イメージ
customers テーブル (`a`):

| customer_id | customer_name |
|------------|---------------|
| 1          | 顧客A         |
| 2          | 顧客B         |
| 3          | 顧客C         |

orders テーブル (`b`):

| order_id | customer_id | order_date       |
|----------|------------|------------------|
| 101      | 1          | 2023-01-15 10:00 |
| 102      | 2          | 2023-01-16 12:30 |
| 103      | 1          | 2023-01-17 14:45 |

order_details テーブル (`c`):

| order_id | order_amount |
|----------|--------------|
| 101      | 50.00        |
| 102      | 30.00        |
| 103      | 75.00        |

結合結果:

| customer_name | order_date       | order_amount |
|---------------|------------------|--------------|
| 顧客A         | 2023-01-15 10:00 | 50.00        |
| 顧客B         | 2023-01-16 12:30 | 30.00        |
| 顧客C         |                  |              |
| 顧客A         | 2023-01-17 14:45 | 75.00        |

このクエリでは、customers(顧客情報) テーブルを a というエイリアスで参照し、orders(注文情報) テーブルを b というエイリアスで、order_details(注文詳細情報) テーブルを c というエイリアスで参照しています。エイリアス a, b, c はそれぞれのテーブルを略語として表し、クエリの可読性を向上させます。

3. 右外部結合 (RIGHT JOIN)

RIGHT JOINは左外部結合の逆で、右側のテーブルの全ての行を保持しながら、左側のテーブルとの共通の値を持つ行を結合します。共通の値が左側のテーブルに存在しない場合、欠損値が生成されます。以下は、商品(products)と在庫情報(inventory)を結合する例です。

SELECT
  products.product_name,
  inventory.stock_quantity
FROM
  products
RIGHT JOIN
  inventory
ON
  products.product_id = inventory.product_id;

#以下イメージ
#productsテーブル:
| product_id | product_name | category_id |
|------------|--------------|-------------|
| 1          | 商品A        | 101         |
| 2          | 商品B        | 102         |
| 3          | 商品C        | 101         |

inventoryテーブル:
| product_id | stock_quantity |
|------------|----------------|
| 1          | 50             |
| 2          | 30             |
| 3          | 75             |

結合結果:
| product_name | stock_quantity |
|--------------|----------------|
| 商品A        | 50             |
| 商品B        | 30             |
| 商品C        | 75             |

新たなテーブルの作成または置き換え

新しいテーブルを作成する場合、CREATE TABLE 文を使用します。またCREATEの後に OR REPLACEとつけると、既存のテーブルが存在する場合は新しいテーブルで置き換え、存在しない場合は新しいテーブルを作成することができます。

CREATE OR REPLACE TABLE new_table_name AS
SELECT
  columns
FROM
  table

まとめ

この技術ブログでは、SQL JOIN句の基本的な使用法と、データベースクエリで異なるテーブルからデータを結合する方法について紹介しました。

INNER JOIN: 2つのテーブルから共通の値を持つ行を結合し、関連データを取得します。例えば、商品情報と価格情報を結合する場合などに使用します。

LEFT JOIN: 左側のテーブルの全ての行を保持し、右側のテーブルとの共通の値を持つ行を結合します。右側のテーブルに共通の値が存在しない場合、欠損値が生成されます。顧客情報と注文情報を結合する際に役立ちます。

RIGHT JOIN: LEFT JOINの逆で、右側のテーブルの全ての行を保持しながら、左側のテーブルとの共通の値を持つ行を結合します。共通の値が左側のテーブルに存在しない場合、欠損値が生成されます。商品、カテゴリ、在庫情報を結合する例を示しました。

これらのJOIN句を活用することで、異なるテーブルからデータを結合し、情報を効果的に取得できます。また、新しいテーブルを作成する方法についても触れ、データベースクエリのスキルを向上させる手助けとなるでしょう。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?