Skip to content

JOINを使ったテーブルの結合

JOINを使ったテーブルの結合

データベースには、複数のテーブルを結合してデータを取得することができます。 テーブルを結合する際には、JOIN句を使用します。

JOINの種類

JOIN句には、以下のような種類があります。

  • INNER JOIN: 2つのテーブルの共通するデータのみを取得します。
  • LEFT JOIN: 左側のテーブルのデータを全て取得し、右側のテーブルのデータが存在しない場合はNULLを返します。
  • RIGHT JOIN: 右側のテーブルのデータを全て取得し、左側のテーブルのデータが存在しない場合はNULLを返します。

INNER JOINの例

以下の例では、usersテーブルとordersテーブルをINNER JOINして、ユーザーと注文の情報を取得しています。

usersテーブル

idname
1Alice
2Bob

ordersテーブル

iduser_idproduct
11Apple
21Banana
32Orange
SELECT users.name, orders.product
FROM users
INNER JOIN orders
ON users.id = orders.user_id;

上記のSQL文では、usersテーブルとordersテーブルをINNER JOINして、usersテーブルのnameカラムとordersテーブルのproductカラムを取得しています。 ON句で結合条件を指定しています。

LEFT JOINの例

以下の例では、usersテーブルとordersテーブルをLEFT JOINして、ユーザーと注文の情報を取得しています。

SELECT users.name, orders.product
FROM users
LEFT JOIN orders
ON users.id = orders.user_id;

上記のSQL文では、usersテーブルとordersテーブルをLEFT JOINして、usersテーブルのnameカラムとordersテーブルのproductカラムを取得しています。 usersテーブルのデータは全て取得され、ordersテーブルのデータが存在しない場合はNULLが返されます。

RIGHT JOINの例

以下の例では、usersテーブルとordersテーブルをRIGHT JOINして、ユーザーと注文の情報を取得しています。

SELECT users.name, orders.product
FROM users
RIGHT JOIN orders
ON users.id = orders.user_id;

上記のSQL文では、usersテーブルとordersテーブルをRIGHT JOINして、usersテーブルのnameカラムとordersテーブルのproductカラムを取得しています。 ordersテーブルのデータは全て取得され、usersテーブルのデータが存在しない場合はNULLが返されます。

演習

以下のテーブルを作成し、INNER JOINLEFT JOINRIGHT JOINを使用してデータを取得してみましょう。

usersテーブル

idname
1Alice
2Bob

ordersテーブル

iduser_idproduct
11Apple
21Banana
32Orange
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT
);
CREATE TABLE orders (
id INTEGER PRIMARY KEY,
user_id INTEGER,
product TEXT
);
INSERT INTO users (name) VALUES ('Alice');
INSERT INTO users (name) VALUES ('Bob');
INSERT INTO orders (user_id, product) VALUES (1, 'Apple');
INSERT INTO orders (user_id, product) VALUES (1, 'Banana');
INSERT INTO orders (user_id, product) VALUES (2, 'Orange');

演習

https://qiita.com/_hiro_dev/items/ece39759879c5d1f8536