Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonとMySQLで2つのテーブルを完全結合(FULL JOIN)する方法

SQLでは、共通の列や指定した条件に基づいて、2つのテーブルを結合(JOIN)することができます。結合の種類にはINNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOINなどがあり、目的に応じて使い分けます。

本記事では、その中でも「FULL JOIN(完全結合)」について解説します。FULL JOINでは、両方のテーブルのすべてのレコードが結果に含まれます。マッチする相手が見つからなかったレコードについては、該当する側にNULLが挿入されます。

FULL JOINの構文

SELECT column1, column2...
FROM table_1
FULL JOIN table_2 ON condition;

サンプルテーブル

ここでは、「Students(学生)」と「Department(学科)」という2つのテーブルを例に説明します。

Students

+----------+--------------+-----------+
|    id    | Student_name | Dept_id   |
+----------+--------------+-----------+
|    1     |     Rahul    |    120    |
|    2     |     Rohit    |    121    |
|    3     |     Kirat    |    121    |
|    4     |     Inder    |    123    |
+----------+--------------+-----------+

Department

+----------+-----------------+
| Dept_id  | Department_name |
+----------+-----------------+
|   120    |      CSE        |
|   121    |   Mathematics   |
|   122    |     Physics     |
+----------+-----------------+

この2つのテーブルには「Dept_id」という共通の列があるため、これをキーとして完全結合を実行します。

PythonでMySQLを使ってFULL JOINを実行する手順

  • MySQL Connectorをインポートする

  • connect()メソッドでデータベースへの接続を確立する

  • cursor()メソッドでカーソルオブジェクトを作成する

  • 適切なSQL文でクエリを作成する

  • execute()メソッドでSQLクエリを実行する

  • fetchall()で結果を取得し、接続を閉じる

コード例

import mysql.connector
db = mysql.connector.connect(host="your host", user="your username", password="yourpassword", database="database_name")

cursor = db.cursor()
query = "SELECT Students.Id, Students.Student_name, Department.Department_name FROM Students FULL JOIN Department ON Students.Dept_Id=Department.Dept_Id"
cursor.execute(query)
rows = cursor.fetchall()
for x in rows:
    print(x)

db.close()

実行結果

(1, 'Rahul', 'CSE')
(2, 'Rohit', 'Mathematics')
(3, 'Kirat', 'Mathematics')
(4, 'Inder', None)
(None, 'Physics')

実行結果を見ると、マッチするレコードが存在しないレコードも含めて、両方のテーブルのすべてのレコードが結果に表示されていることがわかります。学生「Inder」(Dept_id=123)はどの学科にも対応していないため学科名がNULLとなり、逆に学科「Physics」(Dept_id=122)はどの学生にも対応していないため学生情報がNULLとなっています。

注意:MySQLにおけるFULL JOINの扱い

標準SQLではFULL JOINが定義されていますが、MySQLはFULL JOIN(FULL OUTER JOIN)を直接サポートしていません。上記のような結果をMySQLで取得したい場合は、LEFT JOINとRIGHT JOINの結果をUNIONで組み合わせる方法が一般的です。

SELECT Students.Id, Students.Student_name, Department.Department_name
FROM Students LEFT JOIN Department ON Students.Dept_Id = Department.Dept_Id
UNION
SELECT Students.Id, Students.Student_name, Department.Department_name
FROM Students RIGHT JOIN Department ON Students.Dept_Id = Department.Dept_Id;
  1. PythonとTensorFlowで2つの行列を乗算する方法を解説

    TensorFlowは、Googleが提供する機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせてアルゴリズムやディープラーニングアプリケーションなどを実装するために利用されています。研究用途から本番運用まで幅広く使われており、複雑な数学的演算を高速に処理できる最適化技術を備えているのが特長です。 その理由の一つは、NumPyと多次元配列を基盤としている点にあります。この多次元配列は「テンソル」と呼ばれます。TensorFlowは深層ニューラルネットワークの構築をサポートし、高いスケーラビリティを持ち、人気のデータセットが多数付属しています。また、GPUに

  2. PythonとTensorFlowを使って2つの行列を加算する方法

    TensorFlowは、Googleが提供する機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせてアルゴリズムやディープラーニングアプリケーションなどを実装するために広く利用されています。研究用途から本番環境まで幅広い場面で活用されており、複雑な数値計算を高速に実行するための最適化技術が多数搭載されています。この高い処理性能は、NumPyおよび多次元配列の仕組みによって支えられています。これらの多次元配列は「テンソル(tensor)」と呼ばれます。TensorFlowは深層ニューラルネットワークの構築を強力にサポートしており、高い拡張性を持つほか、代表的な