カテゴリ: Python 更新日: 2026/03/12

PythonでSQLのサブクエリ・結合を使う基本と実践例|初心者でもわかるデータ取得の考え方

PythonでSQLのサブクエリ・結合を使う基本と実践例
PythonでSQLのサブクエリ・結合を使う基本と実践例

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

生徒

「Pythonでデータベースを使っていると、テーブルが増えてきて、どうやってデータを組み合わせればいいのかわからなくなります…」

先生

「そんなときに使うのが、SQLの結合やサブクエリです。複数の表をまとめて扱えるようになります。」

生徒

「名前が難しそうですが、初心者でも理解できますか?」

先生

「考え方は意外とシンプルです。身近な例えを使って、順番に見ていきましょう。」

1. SQLで複数の表を扱う理由

1. SQLで複数の表を扱う理由
1. SQLで複数の表を扱う理由

SQLデータベースでは、情報を一つの表にまとめず、役割ごとに分けて保存することが多いです。例えば、ユーザー情報の表と注文情報の表を分けて管理します。これは、ノートを科目ごとに分けるのと同じ考え方です。

PythonでSQLを使うときも、この分かれた表を組み合わせてデータを取り出す必要があります。そのために使われるのが「結合」と「サブクエリ」です。

2. 結合とは何かをイメージで理解する

2. 結合とは何かをイメージで理解する
2. 結合とは何かをイメージで理解する

結合とは、複数のテーブルを共通の情報でつなぎ合わせる仕組みです。例えば、名簿と成績表を「学籍番号」でつなぐと、一人ひとりの名前と成績を同時に見られます。

SQLでは、この処理をJOINと呼びます。PythonからSQLを実行しても、考え方は同じです。


import sqlite3

conn = sqlite3.connect("sample.db")
cursor = conn.cursor()

cursor.execute("""
SELECT users.name, orders.price
FROM users
JOIN orders ON users.id = orders.user_id
""")

rows = cursor.fetchall()
for row in rows:
    print(row)

3. INNER JOINの基本的な使い方

3. INNER JOINの基本的な使い方
3. INNER JOINの基本的な使い方

INNER JOINは、両方の表に共通するデータだけを取り出す結合方法です。ユーザーと注文の両方に存在する情報だけを表示したい場合に使われます。

これは、名簿と出席表を見比べて、両方に名前がある人だけを確認するようなイメージです。

4. サブクエリとは何か

4. サブクエリとは何か
4. サブクエリとは何か

サブクエリとは、SQLの中に書かれた「小さなSQL」のことです。まず条件を決めてから、その結果を使って次の検索を行います。

料理で例えると、先に材料を選び、その材料だけを使って調理するような流れです。処理の順番を整理したいときに便利です。


cursor.execute("""
SELECT name
FROM users
WHERE id IN (
    SELECT user_id
    FROM orders
    WHERE price >= 3000
)
""")

for row in cursor.fetchall():
    print(row[0])

5. サブクエリと結合の違い

5. サブクエリと結合の違い
5. サブクエリと結合の違い

結合は、複数の表を横につなげて一度に表示する方法です。一方、サブクエリは、条件を段階的に絞り込む方法です。

どちらも同じ結果を得られる場合がありますが、考え方が違います。初心者のうちは、「表をつなぐなら結合」「条件を先に決めたいならサブクエリ」と覚えると理解しやすくなります。

6. Pythonでサブクエリを使うときの注意点

6. Pythonでサブクエリを使うときの注意点
6. Pythonでサブクエリを使うときの注意点

PythonからSQLを実行する場合、SQL文は文字列として書かれます。そのため、構文が複雑になると、読みづらくなりがちです。

サブクエリを使うときは、改行を入れて見やすく書くことで、後から見返したときに理解しやすくなります。


query = """
SELECT name
FROM users
WHERE id = (
    SELECT user_id
    FROM orders
    WHERE order_id = 1
)
"""
cursor.execute(query)
print(cursor.fetchone())

7. 結合とサブクエリの実践的な使い分け

7. 結合とサブクエリの実践的な使い分け
7. 結合とサブクエリの実践的な使い分け

実際の開発では、結合とサブクエリを場面に応じて使い分けます。一覧表示のように多くの情報を一度に出したい場合は結合が向いています。

一方で、「特定の条件を満たす人だけを探したい」といった場合は、サブクエリの方が考えやすいことがあります。どちらが正解というわけではなく、読みやすさや理解しやすさが大切です。

8. 初心者がつまずきやすいポイント

8. 初心者がつまずきやすいポイント
8. 初心者がつまずきやすいポイント

SQLの結合やサブクエリでつまずきやすい原因は、「どの表のどの列を使っているのか」が分からなくなることです。紙に表の関係を書き出すと、頭の中が整理されます。

PythonでSQLを扱う場合も、データの流れを意識しながら書くことで、理解しやすくなります。

カテゴリの一覧へ
新着記事
New1
Python
Pythonのスコープとは?ローカル変数・グローバル変数の違いと使い分け
New2
Python
Pythonのreturn文の使い方!値を返す関数の書き方と注意点
New3
Python
PythonでSQLデータベース操作時のエラーハンドリングを初心者向けに完全解説
New4
Python
Pythonの引数の使い方!デフォルト引数・可変長引数・キーワード引数の違い
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonでトランザクション処理を実装する方法を完全解説!commit・rollbackで安全なSQL操作
No.2
Java&Spring記事人気No2
Flask
Flaskとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.3
Java&Spring記事人気No3
Flask
FlaskでAPIのレスポンスをキャッシュ!通信負荷を軽減して爆速にする方法
No.4
Java&Spring記事人気No4
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.5
Java&Spring記事人気No5
Flask
FlaskのSQLAlchemyでフィルタリング検索!filter, filter_byの使い方完全ガイド
No.6
Java&Spring記事人気No6
Flask
Flaskでデータベースエラーを処理する方法!初心者にもわかる例外の使い方
No.7
Java&Spring記事人気No7
Python
Pythonの文字列から一部を抽出する方法!スライスを使った基本的な切り出し方
No.8
Java&Spring記事人気No8
Flask
Flaskで開発中にデータベースを初期化する方法!初心者でもわかる便利なTips