データベースを使うときに、
複数のテーブルから情報を引き出して
組み合わせる方法として「JOIN」があります。
JOINはSQLの基本ですが、
ON句とUSING句の使い方には違いがあります。
本記事では、
これらの違いを初心者でもわかりやすく、
具体的な例を使って解説します。
SQL JOINとは?
まず、JOINが何なのかを簡単に理解しましょう。
JOINは、2つ以上のテーブルから
関連するデータを結びつけて
1つの結果として表示する仕組みです。
たとえば、
「顧客情報のテーブル」と
「注文情報のテーブル」を持っていた場合、
JOINを使えば、
顧客が何を注文したかを一覧で見ることができます。
JOINの種類とその使い方
JOINにはいくつかの種類がありますが、
今回は基本的な4つを紹介します。
- INNER JOIN
2つのテーブルに共通するデータだけを取り出します。 - LEFT JOIN
左側のテーブルの全てのデータを取り出し、
右側にない部分は空になります。 - RIGHT JOIN
右側のテーブルの全てのデータを取り出し、
左側にない部分は空になります。 - FULL JOIN
両方のテーブルに存在するデータをすべて表示します。
これらのJOINを使いこなすことで、
複数のテーブルから必要なデータを
柔軟に取得できるようになります。
ON句とUSING句の違いとは?
JOINを行うときには、
「どの列を使ってテーブルを結びつけるか」を
指定する必要があります。
これを指定するのがON句とUSING句です。
この2つは、似たような役割を持っていますが、
使い方に違いがあります。
それぞれの使い方と特徴を見ていきましょう。
ON句の使い方
ON句は、
異なる列名を持つテーブルを
結合する際に使われます。
たとえば、以下のように、
顧客テーブルのcustomer_id
と注文テーブルのid
が異なる名前でも、
ON句を使えば簡単に結合できます。
SELECT customers.name, orders.total_amount
FROM customers
INNER JOIN orders
ON customers.customer_id = orders.id;
このように、ON句を使えば、
異なる名前の列同士を結びつけることができるため、
複雑な結合条件を柔軟に扱えます。
USING句の使い方
一方、USING句は、
共通する列名がある場合に使います。
つまり、2つのテーブルに同じ名前の列がある場合、
この句を使うことで簡単に等価結合が可能です。
たとえば、顧客テーブルと注文テーブルの両方にcustomer_id
という共通の列があるとします。
このとき、USING句は非常に便利です。
SELECT customers.name, orders.total_amount
FROM customers
INNER JOIN orders
USING (customer_id);
USING句を使うと、
共通の列だけを指定するだけで結合ができ、
結果にはcustomer_id
が1度しか表示されません。
重複する列を削除し、すっきりとした結果が得られます。
ON句を使うべき場合
ON句は、特に以下のような状況で役立ちます。
- 異なる列名を持つテーブルを結合したい場合
- 複数の結合条件が必要な場合
例えば、顧客の名前や注文のステータスなど、
複数の条件で結合したい場合、ON句は便利です。
SELECT customers.name, orders.total_amount
FROM customers
INNER JOIN orders
ON customers.customer_id = orders.id
AND orders.status = 'shipped';
USING句を使うべき場合
USING句は、以下のような状況で使うのが適しています。
- 共通の列名が1つだけあり、シンプルな結合を行いたい場合
- 重複列を避けて、すっきりとした結果が欲しい場合
たとえば、顧客のIDが共通していて、重複を避けたい場合に便利です。
SELECT customers.name, orders.total_amount
FROM customers
LEFT JOIN orders
USING (customer_id);
このように、結合結果がコンパクトにまとまります。
結合後の列数と可読性について
USING句を使うと、
共通する列名は1つしか表示されないため、
結合後の列数が減少し、結果が読みやすくなります。
一方、ON句では結合後に
両方のテーブルの列が表示されることがあり、
重複列が増える可能性があります。
これがコードの可読性や保守性に影響することがあるため、
シンプルなケースではUSING句の使用をおすすめします。
結論: ONとUSING、どちらを使うべきか?
ON句とUSING句にはそれぞれ強みがあり、
状況によって使い分けることが重要です。
- ON句は、複数の結合条件や異なる列名を扱いたい場合に便利です。
- USING句は、共通する列名が1つだけある場合や、
シンプルで見やすい結果を求める場合に使うのが適しています。
まとめ
本記事では、
SQLのJOIN文で使われる
ON句とUSING句の違いについて説明しました。
最初は難しく感じるかもしれませんが、
これらの違いを理解すれば、
複数のテーブルから効率的に
データを取り出せるようになります。
初心者でも使いこなせるように、
まずはシンプルな例から始めて、慣れていきましょう!