雑学1472809 views
中学社会667376 views
ヒストリア285220 views
中学数学621831 views
小学算数1196248 views
高校日本史189967 views
小学社会308869 views
Computer365743 views
小学理科717678 views
MathPython492661 views

INNER JOIN で共通するデータを結合する

複数のテーブルを結合して、関連するデータをまとめて取得するには JOIN を使います。その中でも INNER JOIN は、両方のテーブルに存在するデータだけを取得します。

基本構文

SELECT カラム名 FROM テーブル1
INNER JOIN テーブル2 ON テーブル1.カラム = テーブル2.カラム;

具体例

users テーブルと orders テーブルがあるとします。

-- users テーブル
-- id, name
-- 1, 田中
-- 2, 鈴木
-- 3, 佐藤

-- orders テーブル
-- id, user_id, product
-- 1, 1, りんご
-- 2, 1, みかん
-- 3, 2, バナナ

ユーザー名と注文を一緒に取得するには、こう書きます。

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

結果は次のようになります。

nameproduct
田中りんご
田中みかん
鈴木バナナ

佐藤さんは orders に注文がないので、結果に出てきません。これが INNER JOIN の特徴です。

INNER JOIN の動き

両方に存在するデータ

結果に含まれる

片方にしかないデータ

結果に含まれない

INNER JOIN は「両方のテーブルで条件が一致する行だけ」を返します。

JOIN の省略形

INNER JOIN は単に JOIN と書いても同じ意味です。

-- どちらも同じ
SELECT * FROM users INNER JOIN orders ON users.id = orders.user_id;
SELECT * FROM users JOIN orders ON users.id = orders.user_id;

テーブルに別名をつける

テーブル名が長いと読みにくくなるので、別名(エイリアス)をつけることが多いです。

SELECT u.name, o.product
FROM users u
INNER JOIN orders o ON u.id = o.user_id;

users u で users テーブルに u という別名をつけています。

WHERE と組み合わせる

JOIN した結果に WHERE で条件をつけることもできます。

SELECT u.name, o.product
FROM users u
INNER JOIN orders o ON u.id = o.user_id
WHERE o.product = 'りんご';

この例では、りんごを注文したユーザーだけが取得されます。

INNER JOIN はテーブル結合の基本です。次に覚えるべきは、片方にしかないデータも取得できる LEFT JOIN でしょう。