MySQL JOIN ON vs USING ? の違いを徹底解説!
MySQL JOIN ON vs USING ?
MySQLでテーブルを結合する際、JOIN
句にON
とUSING
の2つのオプションがあります。どちらも同じ結果を返す場合もありますが、それぞれ異なる特徴があり、使い分けが重要です。
ON
は、結合条件を指定するオプションです。結合するテーブルの列を比較し、一致する行のみを結果に含めます。
SELECT *
FROM テーブル1
JOIN テーブル2
ON テーブル1.列名 = テーブル2.列名;
USING
は、結合する列を指定するオプションです。ON
と異なり、結合条件は省略されます。両方のテーブルで同じ名前の列が存在する場合、それらの列で結合されます。
SELECT *
FROM テーブル1
JOIN テーブル2
USING (列名);
比較
機能 | ON | USING |
---|---|---|
結合条件 | 指定可能 | 省略不可 |
列名 | 完全一致が必要 | 部分一致でも可 |
可読性 | 冗長になる場合がある | 簡潔で分かりやすい |
柔軟性 | 高い | 低い |
使い分け
- 結合条件を明確に記述したい場合は
ON
を使用します。 - 列名が一致し、シンプルな結合を行う場合は
USING
を使用します。 - 外部キー制約が定義されている場合は、
USING
の方が効率的な場合があります。
注意点
USING
は、両方のテーブルで同じ名前の列が存在する場合のみ使用できます。USING
は、結合条件を省略するため、意図しない結果になる可能性があります。
補足
NATURAL JOIN
という、USING
に似たオプションもあります。これは、両方のテーブルで同じ名前の列をすべて使って結合するオプションです。ただし、列名が一致しない場合や、結合条件を明確に記述したい場合は使用しないことを推奨します。- 上記の説明は基本的な内容のみです。詳細については、上記の参考資料を参照してください。
-- テーブル定義
CREATE TABLE テーブル1 (
id INT,
name VARCHAR(255)
);
CREATE TABLE テーブル2 (
id INT,
age INT
);
-- データ挿入
INSERT INTO テーブル1 (id, name) VALUES (1, 'John Doe');
INSERT INTO テーブル1 (id, name) VALUES (2, 'Jane Doe');
INSERT INTO テーブル2 (id, age) VALUES (1, 30);
INSERT INTO テーブル2 (id, age) VALUES (2, 25);
-- 結合
SELECT *
FROM テーブル1
JOIN テーブル2
ON テーブル1.id = テーブル2.id;
-- 結果
-- id | name | id | age
-- -- | -- | -- | --
-- 1 | John Doe | 1 | 30
-- 2 | Jane Doe | 2 | 25
USING
-- テーブル定義
CREATE TABLE テーブル1 (
id INT,
name VARCHAR(255)
);
CREATE TABLE テーブル2 (
id INT,
age INT
);
-- データ挿入
INSERT INTO テーブル1 (id, name) VALUES (1, 'John Doe');
INSERT INTO テーブル1 (id, name) VALUES (2, 'Jane Doe');
INSERT INTO テーブル2 (id, age) VALUES (1, 30);
INSERT INTO テーブル2 (id, age) VALUES (2, 25);
-- 結合
SELECT *
FROM テーブル1
JOIN テーブル2
USING (id);
-- 結果
-- id | name | age
-- -- | -- | --
-- 1 | John Doe | 30
-- 2 | Jane Doe | 25
解説
上記のサンプルコードでは、ON
とUSING
を使用して、テーブル1
とテーブル2
を結合しています。
ON
の場合、テーブル1.id
とテーブル2.id
を比較して、一致する行のみを結果に含めています。USING
の場合、id
という名前の列で両方のテーブルを結合しています。
実行結果
両方のコードとも、同じ結果を出力します。
ON
とUSING
は、どちらもMySQLでテーブルを結合するために使用できるオプションです。それぞれ異なる特徴があり、使い分けが重要です。
MySQLでテーブルを結合するその他の方法
INNER JOIN
は、結合条件を満たす行のみを結果に含める最も一般的な結合方法です。
SELECT *
FROM テーブル1
INNER JOIN テーブル2
ON テーブル1.id = テーブル2.id;
LEFT JOIN
は、結合条件を満たす行に加えて、左側のテーブルのすべての行を結果に含めます。
SELECT *
FROM テーブル1
LEFT JOIN テーブル2
ON テーブル1.id = テーブル2.id;
SELECT *
FROM テーブル1
RIGHT JOIN テーブル2
ON テーブル1.id = テーブル2.id;
SELECT *
FROM テーブル1
FULL JOIN テーブル2
ON テーブル1.id = テーブル2.id;
CROSS JOIN
は、すべての行を組み合わせた結果を出力します。
SELECT *
FROM テーブル1
CROSS JOIN テーブル2;
- 上記以外にも、
STRAIGHT_JOIN
やNATURAL JOIN
など、いくつかの結合方法があります。 - 結合方法を選択する際には、必要なデータと結合条件を考慮する必要があります。
mysql join using