目次
PostgreSQLでinner joinとwhereを使ってデータを取得する方法
PostgreSQLでinner join句とwhere句を使ってデータを取得するには、以下の構文でSQLクエリを書けば可能です。
SELECT * FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name
WHERE table1.column_name = some_value;
実際に具体的なデータを用意し、それをもとにinner joinとwhereを使ってデータを取る方法を見ていきましょう。
前提となるテーブルはこちら
1、usersテーブル
id | name | age | gender |
1 | 田中 太郎 | 30 | male |
2 | 佐藤 次郎 | 25 | male |
3 | 鈴木 花子 | 36 | female |
4 | 山田 一郎 | 40 | male |
5 | 渡辺 美奈子 | 44 | female |
6 | 松本 真理子 | 27 | female |
2、ordersテーブル
id | user_id | product_id | quantity | ordered_at |
1 | 1 | 1 | 5 | 2022-12-01 |
2 | 1 | 2 | 3 | 2022-12-03 |
3 | 2 | 3 | 2 | 2022-12-04 |
4 | 2 | 4 | 1 | 2022-12-05 |
5 | 3 | 1 | 4 | 2022-12-06 |
6 | 3 | 2 | 2 | 2022-12-07 |
7 | 4 | 3 | 3 | 2022-12-08 |
8 | 4 | 4 | 4 | 2022-12-09 |
9 | 5 | 5 | 1 | 2022-12-10 |
10 | 6 | 5 | 2 | 2022-12-11 |
3、productsテーブル
id | name | price |
1 | 商品A | 1000 |
2 | 商品B | 1500 |
3 | 商品C | 2000 |
4 | 商品D | 2500 |
5 | 商品E | 3000 |
具体的なコード例
例1: 年齢が40以上の人の注文情報を取得する場合
これは、usersテーブルとordersテーブルをJOINし、age >= 40 のレコードを取得するSQLクエリで実現できます。
SELECT orders.*
FROM orders
JOIN users ON orders.user_id = users.id
WHERE users.age >= 40
例2: 年齢が20代の人が注文した商品データを取得する場合
これは、ordersテーブルとusersテーブルをJOINし、productsテーブルをJOINし、ageが20代のレコードを取得するSQLクエリで実現できます。
SELECT products.name
FROM products
INNER JOIN orders
ON products.id = orders.product_id
INNER JOIN users
ON orders.user_id = users.id
WHERE users.age BETWEEN 20 AND 29;