Javaデータベース入門 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データベースで重要なテーブル結合
SQLのJOINとは、複数のテーブルを結合してデータを取得するためのSQL構文です。データベース設計では、データを複数のテーブルに分けて管理することが一般的です。そのため、必要な情報を取得する際にはテーブル同士を結合する必要があります。
例えば、次のようなデータベースがあるとします。
ユーザーテーブルにはユーザー情報、注文テーブルには注文情報が保存されています。注文テーブルにはユーザーIDが保存されており、それを使ってユーザー情報と結び付けることができます。
このように、共通のカラムを使って複数のテーブルを結合する処理をJOINと呼びます。JavaでMySQLやPostgreSQLなどのデータベースを扱う場合にも、SQLの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で最もよく使うテーブル結合
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は非常によく使われます。
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の基本 右側のテーブルを基準に結合する
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の仕組み 両方のテーブルをすべて取得する
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の基本
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を理解するとデータベース設計が分かる
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の理解はさらに深まります。