SQLを学ぶ中で、多くの方がJOINのあたりで詰まります。「複数のテーブルを結合する」という説明はわかるのですが、実際にどう書けばいいか、INNER JOINとLEFT JOINの違いは何かが、最初はわかりにくいです。具体的なテーブルを使って説明します。
なぜJOINが必要か ¶
データベースでは、関連するデータを別々のテーブルに分けて保存することが多いです。たとえば、注文テーブルには顧客IDが入っていますが、顧客の名前は顧客テーブルにあります。注文と顧客の名前を一緒に取り出したいとき、JOINを使って2つのテーブルを結合します。JOINを使わずに済む場面は、実務ではほとんどありません。
INNER JOINとは何か ¶
INNER JOINは、両方のテーブルに一致するデータがある行だけを取り出します。注文テーブルと顧客テーブルをINNER JOINで結合すると、顧客IDが両方のテーブルに存在する注文だけが結果に含まれます。顧客IDが顧客テーブルに存在しない注文は、結果から除外されます。
LEFT JOINとの違い ¶
LEFT JOINは、左側のテーブル(FROM句に書いたテーブル)のすべての行を取り出し、右側のテーブルに一致するデータがない場合はNULLを返します。注文テーブルをLEFT JOINで顧客テーブルと結合すると、顧客IDが顧客テーブルに存在しない注文も結果に含まれます(顧客情報の列はNULLになります)。「すべての注文を取り出したい」場合はLEFT JOINを使います。
書き方の基本 ¶
JOINの基本的な書き方は、SELECT 列名 FROM テーブルA JOIN テーブルB ON テーブルA.列 = テーブルB.列 です。ON句には、2つのテーブルを結びつける条件を書きます。多くの場合、一方のテーブルの主キーと、もう一方のテーブルの外部キーを等号で結びます。まず手元で小さなテーブルを作って試してみると、動きが確認しやすいです。
JOINは、SQLを実務で使うために欠かせない操作です。Timeless Ripple WildernessのSQL・データベース入門コースでは、サンプルデータを使った演習課題でJOINを実際に書きながら学べます。