LaTeX958047 views
小学算数1196248 views
数学講師2859838 views
小学理科717678 views
中学英語809327 views
高校国語786065 views
世界の国561222 views
教育149021 views
高校化学2914902 views
ヒストリア285220 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 でしょう。