▶️ information

Database

Python

データベースとは

データを入れておく箱。情報やデータを効率的に保存し、管理し、取り出すための仕組みやシステムのこと。

テーブル結合 (JOIN)

テーブル結合は、データベースの中にある異なる表(テーブル)をくっつけて、1つの大きな表にすること。

例えば、友達のリストとその友達の住所のリストをくっつけて、どの友達がどこに住んでいるかをまとめた1つのリストにするような感じ。

  • 友達リスト
    • 友達ID: 1, 名前: やすこ
    • 友達ID: 2, 名前: あきこ
  • 住所リスト
    • 友達ID: 1, 住所: 京都
    • 友達ID: 2, 住所: 大阪

これらを結合すると、以下のような1つの表になります:

  • 結合したリスト
    • 友達ID: 1, 名前: やすこ, 住所: 京都
    • 友達ID: 2, 名前: あきこ, 住所: 大阪

GROUP BY 集約

GROUP BY集約は、似たようなデータをグループにまとめて、そのグループごとに集計を行うこと。

例えば、クラス全員の成績表があって、科目ごとに平均点を出したいときに使う。

  • 成績表
    • 名前: やすこ, 科目: 数学, 点数: 90
    • 名前: あきこ, 科目: 数学, 点数: 80
    • 名前: やすこ, 科目: 国語, 点数: 85
    • 名前: あきこ, 科目: 国語, 点数: 88

これを科目ごとにグループに分けて、平均点を計算すると:

  • 数学の平均点
    • (90 + 80) / 2 = 85
  • 国語の平均点
    • (85 + 88) / 2 = 86.5

このように、数学と国語でそれぞれの平均点がわかるようになります。

Python

import sqlite3

# データベースを作成して接続

conn = sqlite3.connect(‘:memory:’)  # メモリ内データベースを使用

cursor = conn.cursor()

# テーブルの作成

cursor.execute(‘CREATE TABLE friends (友達ID INTEGER, 名前 TEXT)’)

cursor.execute(‘CREATE TABLE addresses (友達ID INTEGER, 住所 TEXT)’)

cursor.execute(‘CREATE TABLE grades (名前 TEXT, 科目 TEXT, 点数 INTEGER)’)

# データの挿入

cursor.execute(‘INSERT INTO friends VALUES (1, “やすこ”), (2, “あきこ”)’)

cursor.execute(‘INSERT INTO addresses VALUES (1, “京都”), (2, “大阪”)’)

cursor.execute(‘INSERT INTO grades VALUES (“やすこ”, “数学”, 90), (“あきこ”, “数学”, 80), (“やすこ”, “国語”, 85), (“あきこ”, “国語”, 88)’)

# 変更を保存

conn.commit()

# テーブル結合 (JOIN)

cursor.execute(”’

SELECT friends.友達ID, friends.名前, addresses.住所

FROM friends

JOIN addresses ON friends.友達ID = addresses.友達ID

”’)

# 結果を取得して表示

joined_result = cursor.fetchall()

print(“テーブル結合結果:”)

for row in joined_result:

    print(row)

# GROUP BY 集約

cursor.execute(”’

SELECT 科目, AVG(点数) as 平均点

FROM grades

GROUP BY 科目

”’)

# 結果を取得して表示

grouped_result = cursor.fetchall()

print(“\nGROUP BY 集約結果:”)

for row in grouped_result:

    print(row)

# 接続を閉じる

conn.close()

出力結果

テーブル結合結果:
(1, ‘やすこ’, ‘京都’)
(2, ‘あきこ’, ‘大阪’)

GROUP BY 集約結果:
(‘国語’, 86.5)
(‘数学’, 85.0)

まとめ

  • テーブル結合: 2つのリストをくっつけて1つの大きなリストにすること。
  • GROUP BY集約: 似たデータをグループにまとめて、そのグループごとに集計を行うこと。

テーブル結合の種類

内部結合 (INNER JOIN)

  • 定義: 両方のテーブルに結合条件を満たすレコードが存在する場合のみ、結合結果に含める。
  • 使い方: 共通のデータが必要な時に使用。
  • :SQL
SELECT * FROM テーブルA 
INNER JOIN テーブルB
ON テーブルA.id = テーブルB.id;
  • 例解説: テーブルAテーブルBidが一致するレコードだけを取得。

外部結合 (OUTER JOIN)

  • 定義: 片方のテーブルに結合条件を満たすレコードが存在しない場合、フィールドの値をNULLで補完して結合する。
  • 種類: 左結合 (LEFT JOIN) と右結合 (RIGHT JOIN)。
左結合 (LEFT JOIN)
  • 定義: 左のテーブル(基準となるテーブル)に結合条件を満たさないレコードがある場合、右のテーブルのフィールドはNULLで補完。
  • 使い方: 基準となるテーブルの全レコードが必要な時に使用。
  • :SQL
SELECT * FROM テーブルA 
LEFT JOIN テーブルB
ON テーブルA.id = テーブルB.id;
  • 例解説: テーブルAの全レコードを取得し、テーブルBに一致するものがあれば結合し、一致しない場合はテーブルBのフィールドはNULL。
右結合 (RIGHT JOIN)
  • 定義: 右のテーブル(基準となるテーブル)に結合条件を満たさないレコードがある場合、左のテーブルのフィールドはNULLで補完。
  • 使い方: 基準となるテーブルの全レコードが必要な時に使用。
  • :SQL
SELECT * FROM テーブルA 
RIGHT JOIN テーブルB
ON テーブルA.id = テーブルB.id;
  • 例解説: テーブルBの全レコードを取得し、テーブルAに一致するものがあれば結合し、一致しない場合はテーブルAのフィールドはNULL。

これらの結合を使用することで、必要なデータを効率よく取得できる。

タイトルとURLをコピーしました