カテゴリ: Javaのデータベースの基本 更新日: 2026/08/16

Javaデータベース入門 SQLのJOINを完全解説 INNER JOIN LEFT JOIN RIGHT JOIN FULL JOINを初心者向けに理解する

2087
SQL の JOIN(INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN)を理解する

先生と生徒の会話形式で理解しよう

生徒

「Javaでデータベースを扱う勉強をしているんですが、SQLのJOINって何ですか?INNER JOINとかLEFT JOINとか種類が多くてよく分からないです。」

先生

「SQLのJOINは、データベースの複数のテーブルを結合してデータを取得するための重要な機能です。Javaのデータベース処理でも必ず使う知識です。」

生徒

「テーブルを結合するというのはどういう意味ですか?」

先生

「例えば、ユーザー情報のテーブルと注文情報のテーブルを組み合わせて、どのユーザーがどんな注文をしたのかを取得することができます。そのときに使うのがSQLのJOINです。」

生徒

「なるほど。INNER JOINやLEFT JOINの違いも知りたいです。」

先生

「それでは、Javaでデータベースを扱うときに必ず理解しておきたいSQLのJOINの基本を、初心者向けに丁寧に解説していきましょう。」

1. SQLのJOINとは何か Javaデータベースで重要なテーブル結合

1. SQLのJOINとは何か Javaデータベースで重要なテーブル結合
1. SQLのJOINとは何か Javaデータベースで重要なテーブル結合

SQLのJOINとは、複数のテーブルを結合してデータを取得するためのSQL構文です。データベース設計では、データを複数のテーブルに分けて管理することが一般的です。そのため、必要な情報を取得する際にはテーブル同士を結合する必要があります。

例えば、次のようなデータベースがあるとします。

ユーザーテーブルにはユーザー情報、注文テーブルには注文情報が保存されています。注文テーブルにはユーザーIDが保存されており、それを使ってユーザー情報と結び付けることができます。

このように、共通のカラムを使って複数のテーブルを結合する処理をJOINと呼びます。JavaでMySQLやPostgreSQLなどのデータベースを扱う場合にも、SQLのJOINは非常によく使われます。

2. サンプルテーブルを作ってJOINの仕組みを理解する

2. サンプルテーブルを作ってJOINの仕組みを理解する
2. サンプルテーブルを作ってJOINの仕組みを理解する

まずはJOINの理解を深めるために、シンプルなテーブル構造を考えてみます。ユーザー情報と注文情報の2つのテーブルを用意します。


CREATE TABLE users (
    id INT,
    name VARCHAR(50)
);

CREATE TABLE orders (
    id INT,
    user_id INT,
    product VARCHAR(100)
);

usersテーブルにはユーザーの情報があり、ordersテーブルには注文データがあります。ordersテーブルにはuser_idというカラムがあり、これはusersテーブルのidと対応しています。

このような構造のデータベースでは、JOINを使うことで「どのユーザーがどの商品を注文したのか」を取得することができます。

3. INNER JOINの基本 SQLで最もよく使うテーブル結合

3. INNER JOINの基本 SQLで最もよく使うテーブル結合
3. INNER JOINの基本 SQLで最もよく使うテーブル結合

INNER JOINはSQLのJOINの中で最もよく使われる結合方法です。INNER JOINは、両方のテーブルに一致するデータが存在する場合だけ結果を取得します。

つまり、2つのテーブルの共通部分だけを取得するJOINです。


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

このSQLでは、usersテーブルとordersテーブルを結合しています。users.idとorders.user_idが一致するデータだけを取得します。

例えば次のようなデータがあった場合を考えてみます。


name      product
Taro      Laptop
Hanako    Smartphone

INNER JOINは、両方のテーブルにデータが存在するものだけを取得するため、対応するデータがない場合は結果に表示されません。JavaのJDBCでデータを取得するときも、このINNER JOINは非常によく使われます。

Javaをこれから始める人や、 オブジェクト指向の考え方を基礎から理解したい人には、 定番の入門書がこちらです。

スッキリわかるJava入門 第5版をAmazonで見る

※ Amazon広告リンク

4. LEFT JOINの使い方 左側のテーブルをすべて取得する

4. LEFT JOINの使い方 左側のテーブルをすべて取得する
4. LEFT JOINの使い方 左側のテーブルをすべて取得する

LEFT JOINは、左側のテーブルのデータをすべて取得するJOINです。右側のテーブルに一致するデータがない場合でも、左側のテーブルのデータは必ず取得されます。


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

このSQLでは、usersテーブルのすべてのユーザーが結果に表示されます。もし注文データが存在しない場合は、ordersのカラムはNULLになります。


name      product
Taro      Laptop
Hanako    Smartphone
Jiro      NULL

このように、LEFT JOINはデータが存在しない場合でもレコードを取得できるため、ユーザー一覧や商品一覧などを表示するときによく使われます。

5. RIGHT JOINの基本 右側のテーブルを基準に結合する

5. RIGHT JOINの基本 右側のテーブルを基準に結合する
5. RIGHT JOINの基本 右側のテーブルを基準に結合する

RIGHT JOINはLEFT JOINの反対の動作になります。RIGHT JOINは、右側のテーブルのデータをすべて取得します。


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

この場合、ordersテーブルのデータがすべて取得されます。もしusersテーブルに対応するユーザーがいない場合でも、注文データは表示されます。

実際の開発では、RIGHT JOINはあまり使われず、LEFT JOINを使うケースの方が多い傾向があります。理由は、クエリの読みやすさや設計の都合で、左側を基準に書くことが多いからです。

6. FULL JOINの仕組み 両方のテーブルをすべて取得する

6. FULL JOINの仕組み 両方のテーブルをすべて取得する
6. FULL JOINの仕組み 両方のテーブルをすべて取得する

FULL JOINは、両方のテーブルのデータをすべて取得するJOINです。対応するデータが存在しない場合でも、どちらのテーブルのデータも表示されます。


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

このJOINでは、usersテーブルとordersテーブルのすべてのデータが取得されます。

例えばユーザーに注文が無い場合や、注文データにユーザー情報が無い場合でも、どちらのデータも結果に含まれます。

ただし、MySQLなど一部のデータベースではFULL JOINが直接使えない場合があります。その場合はUNIONなどを使って同じ結果を作ることがあります。

7. JavaからSQLのJOINを実行する方法 JDBCの基本

7. JavaからSQLのJOINを実行する方法 JDBCの基本
7. JavaからSQLのJOINを実行する方法 JDBCの基本

JavaではJDBCを使ってデータベースに接続し、SQLのJOINを実行することができます。JOINのSQLは通常のSELECT文と同じように実行できます。


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;

public class JoinExample {

    public static void main(String[] args) throws Exception {

        Connection conn = DriverManager.getConnection(
            "jdbc:mysql://localhost:3306/sampledb",
            "root",
            "password"
        );

        Statement stmt = conn.createStatement();

        String sql = "SELECT users.name, orders.product " +
                     "FROM users INNER JOIN orders " +
                     "ON users.id = orders.user_id";

        ResultSet rs = stmt.executeQuery(sql);

        while (rs.next()) {
            System.out.println(rs.getString("name") + " : " + rs.getString("product"));
        }

        rs.close();
        stmt.close();
        conn.close();
    }
}

このプログラムでは、JavaからSQLのINNER JOINを実行して結果を取得しています。ResultSetを使うことで、SQLの実行結果を1行ずつ読み取ることができます。

JavaのWebアプリケーションや業務システムでは、このようにSQLのJOINを使って複数のテーブルからデータを取得する処理が非常に多く使われます。

8. SQL JOINを理解するとデータベース設計が分かる

8. SQL JOINを理解するとデータベース設計が分かる
8. SQL JOINを理解するとデータベース設計が分かる

SQLのJOINを理解すると、データベース設計の考え方も理解しやすくなります。実際のシステムでは、ユーザー、注文、商品、カテゴリなどの情報が複数のテーブルに分かれて管理されています。

そのため、必要なデータを取得するためにはJOINを使ってテーブルを結合することが必要になります。

JavaのSpring BootやHibernateなどのフレームワークを使う場合でも、内部ではSQLのJOINが使われています。そのため、SQLのJOINを理解しておくことはJavaエンジニアにとって非常に重要なスキルです。

特に次の4つのJOINの違いは必ず覚えておきましょう。

INNER JOINは共通データのみ取得する結合です。LEFT JOINは左テーブルをすべて取得する結合です。RIGHT JOINは右テーブルをすべて取得する結合です。FULL JOINは両方のテーブルをすべて取得する結合です。

この違いを理解しておくことで、SQLのデータ取得処理がスムーズに書けるようになります。

まとめ

まとめ
まとめ

ここまで、Javaデータベース入門としてSQLのJOINについて詳しく学んできました。SQLのJOINは、データベースに保存された複数のテーブルを結合して必要なデータを取得するための非常に重要な機能です。実際のシステム開発では、データを一つのテーブルだけで管理することはほとんどありません。ユーザー情報、注文情報、商品情報、カテゴリ情報などをそれぞれ別のテーブルに分けて管理し、それらをSQLのJOINを使って結合してデータを取得します。

特にJavaでデータベースを扱う場合、MySQLやPostgreSQLなどのリレーショナルデータベースを利用することが多く、そのときにSQLのJOINを理解しているかどうかでデータ取得の理解度が大きく変わります。JavaのJDBCでSQLを実行するときも、Webアプリケーション開発でSpring BootやHibernateを利用するときも、内部ではSQLのJOINが使われています。そのため、Javaエンジニアとしてデータベースを扱うためにはSQL JOINの理解が欠かせません。

SQL JOINにはいくつかの種類がありますが、今回の記事では特に重要な四つのJOINを学びました。それがINNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOINです。それぞれのJOINには異なる特徴があり、データの取得方法が変わります。状況に応じて使い分けることで、効率よくデータを取得することができます。

INNER JOINのポイント

INNER JOINはSQL JOINの中で最も基本的で、最もよく使われる結合方法です。INNER JOINは、二つのテーブルの中で共通するデータだけを取得します。つまり、結合条件に一致するレコードだけが結果として表示されます。ユーザーと注文のように、必ず対応関係があるデータを取得するときにとても便利です。


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

このSQLでは、usersテーブルのidとordersテーブルのuser_idが一致するデータだけを取得します。データベース設計では、このような共通のキーを使ってテーブルを結び付けることが非常に多く、INNER JOINは日常的に使われるSQL構文です。JavaでResultSetを使ってデータを取得する場合も、このINNER JOINの結果を一行ずつ読み取ることになります。

LEFT JOINのポイント

LEFT JOINは、左側のテーブルのデータをすべて取得するJOINです。右側のテーブルに対応するデータが存在しない場合でも、左側のデータは必ず結果に表示されます。これは一覧画面などを作るときに非常によく使われるSQL JOINです。


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

例えば、ユーザー一覧を表示するときに、そのユーザーが注文をしているかどうかを確認したい場合があります。そのときINNER JOINを使うと注文していないユーザーが表示されなくなってしまいます。しかしLEFT JOINを使えば、注文していないユーザーも含めてすべてのユーザーを表示することができます。このような理由から、LEFT JOINは業務システムやWebアプリケーションで非常に頻繁に利用されます。

RIGHT JOINのポイント

RIGHT JOINはLEFT JOINと反対の動きをするSQL JOINです。RIGHT JOINでは右側のテーブルのデータをすべて取得します。左側のテーブルに一致するデータが存在しない場合でも、右側のデータは結果として取得されます。


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

実際のシステム開発ではRIGHT JOINはそれほど多く使われるわけではありません。多くの開発者は、LEFT JOINを基準にSQLを書くことが多いからです。ただしRIGHT JOINの動作を理解しておくことで、SQL JOINの仕組みをより深く理解することができます。SQLのJOINを学ぶときは、LEFT JOINとRIGHT JOINの違いをしっかり理解しておくことが大切です。

FULL JOINのポイント

FULL JOINは、二つのテーブルのデータをすべて取得するJOINです。片方のテーブルにしか存在しないデータも結果に含まれます。そのため、データの全体像を確認するときや、データの対応関係を確認するときに使われることがあります。


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

ただし、MySQLではFULL JOINが直接使えない場合があります。その場合はUNIONなどを使って同じ結果を作る方法が使われます。データベースの種類によってSQLの機能に違いがあることも覚えておくと、Javaでデータベースを扱うときに役立ちます。

JavaからJOINを実行する基本

Javaからデータベースを操作するときは、JDBCを使ってSQLを実行します。JOINを使ったSQLも通常のSELECT文と同じように実行できます。JavaプログラムではConnectionでデータベースに接続し、StatementまたはPreparedStatementでSQLを実行し、ResultSetで結果を取得します。


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;

public class JoinSummaryExample {

    public static void main(String[] args) throws Exception {

        Connection conn = DriverManager.getConnection(
            "jdbc:mysql://localhost:3306/sampledb",
            "root",
            "password"
        );

        Statement stmt = conn.createStatement();

        String sql =
            "SELECT users.name, orders.product " +
            "FROM users LEFT JOIN orders " +
            "ON users.id = orders.user_id";

        ResultSet rs = stmt.executeQuery(sql);

        while (rs.next()) {
            String name = rs.getString("name");
            String product = rs.getString("product");

            System.out.println(name + " : " + product);
        }

        rs.close();
        stmt.close();
        conn.close();
    }
}

このようにJavaからSQL JOINを実行することで、複数のテーブルを結合した結果をプログラムで扱うことができます。Javaの業務システムやWebアプリケーションでは、ユーザー情報と注文情報、商品情報とカテゴリ情報など、複数のテーブルをJOINしてデータを取得する処理が日常的に行われています。

SQL JOINを理解することは、単にSQLの文法を覚えるだけではありません。データベース設計の考え方やテーブルの関係性を理解することにもつながります。テーブル同士の関係を理解し、適切なJOINを使うことで、効率よくデータを取得できるようになります。Javaエンジニアとしてデータベースを扱うためには、SQL JOINの仕組みをしっかり理解しておくことがとても大切です。

先生と生徒の振り返り会話

生徒

先生、SQLのJOINについてだいぶ理解できてきました。テーブルを結合するという意味が最初は分からなかったんですが、ユーザー情報と注文情報のように複数のテーブルを組み合わせてデータを取得する仕組みなんですね。

先生

その通りです。データベースでは情報を一つのテーブルにまとめるのではなく、役割ごとにテーブルを分けて管理します。そして必要なときにSQLのJOINを使ってテーブルを結合してデータを取得します。

生徒

INNER JOINは共通するデータだけ取得する結合で、LEFT JOINは左側のテーブルをすべて取得する結合でしたよね。RIGHT JOINはその逆で、FULL JOINは両方のテーブルをすべて取得する結合でした。

先生

よく理解できています。特に実務ではINNER JOINとLEFT JOINがよく使われます。SQLを書くときは、どのテーブルを基準にするのかを意識してJOINを書くことが重要です。

生徒

JavaからSQLを実行するときも、JOINを書いたSQLをそのまま実行できるんですね。JDBCでResultSetを使えば結果を取り出せるという流れも理解できました。

先生

そうです。Javaでデータベースを扱うプログラムを書くときには、SQL JOINを理解していることがとても大切です。JOINを使いこなせるようになると、複雑なデータ取得もスムーズに書けるようになります。

生徒

SQL JOINの仕組みが分かると、データベース設計の考え方も理解できるようになってきました。これからは実際にSQLを書いて練習してみます。

先生

それが一番の勉強方法です。INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOINを実際に試しながら、どのような結果になるのかを確認してみてください。そうすればSQL JOINの理解はさらに深まります。

Javaのデータベースの基本の一覧へ
新着記事
Flutter
FlutterでWebアプリをビルドする方法と注意点
FlutterでWebアプリをビルドする方法と注意点を徹底解説【初心者向け】
Flutter
Flutter Web開発の始め方!環境構築と基本の流れ
Flutter Web開発の始め方を完全ガイド!初心者でもわかる環境構築と基本の流れ
Flutter
FlutterのInheritedWidgetとは?仕組みと活用方法
FlutterのInheritedWidgetとは?仕組みと活用方法を初心者向けにやさしく解説
Flutter
Blocパターンの仕組みと導入方法をわかりやすく解説
FlutterのBlocパターンを完全ガイド!初心者でもわかる状態管理と導入方法
人気記事
Flutter
Flutterの開発に必要なもの!パソコン・ツール・OSなど準備まとめ
Flutterの開発に必要なもの!パソコン・ツール・OSなど準備まとめ
Java
Java の Random クラスを使ってランダムな数値を生成する方法
JavaのRandomクラスの使い方を完全ガイド!初心者でもわかる乱数生成
Java
Java の getter メソッドと setter メソッドの使い方
Javaのgetterメソッドとsetterメソッドの使い方を完全ガイド!初心者でもわかるアクセス方法
AWS
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説

🔌 USBポート不足を解消

Type-C 1本で拡張。
開発・作業環境を一気に快適に

UGREEN USB-Cハブを見る

※ Amazon広告リンク