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

PythonとMySQLでUNIONを使う方法を徹底解説!2つのSELECT結果を重複なく結合する手順

UNION文は、2つのSELECTクエリの結果を、重複する値を除外した上で1つに結合するために使用されます。両方のSELECTクエリが同じ行を返した場合でも、その行は結果に1回だけ表示されます。これにより、複数のテーブルから重複のないデータを効率的に取得できます。

UNIONを使用するための条件

2つのSELECT文に対してUNIONを実行するには、以下の条件を満たしている必要があります。

  • 両方のSELECT文で返されるカラムの数が同じであること
  • 対応するカラムのデータ型が同じ(または互換性がある)こと
  • 両方のSELECT文でカラムが同じ順序で返されること

基本構文

SELECT column_name FROM table1
UNION
SELECT column_name FROM table2

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

PythonからMySQLデータベースに対してUNIONクエリを実行するには、以下の手順に従います。

  1. mysql.connectorモジュールをインポートする
  2. connect()メソッドを使ってデータベースとの接続を確立する
  3. cursor()メソッドを使ってカーソルオブジェクトを作成する
  4. UNIONを含むSQLクエリを作成する
  5. execute()メソッドを使ってSQLクエリを実行する
  6. fetchall()などで結果を取得し、処理を行う
  7. 接続を閉じる

サンプルテーブルの準備

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

Students テーブル

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

Department テーブル

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

この例では、両方のテーブルから「Dept_id」カラムを選択し、その結果に対してUNIONを実行します。これにより、両方のテーブルに存在するすべての重複しないDept_idの一覧を取得できます。

実装例

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

cursor=db.cursor()

query="SELECT Dept_id FROM Students UNION SELECT Dept_id FROM Department"
cursor.execute(query)

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

db.close()

実行結果

120
121
125
123
122

出力を見ると、StudentsテーブルのDept_id(120、121、125、123)とDepartmentテーブルのDept_id(120、121、122)が結合され、重複していた「120」と「121」はそれぞれ1回だけ表示されていることがわかります。

補足:重複を許可したい場合はUNION ALLを使う

もし重複する行も含めてすべての結果を取得したい場合は、UNION ALLを使用します。UNIONは内部的に重複排除の処理を行うためやや時間がかかりますが、UNION ALLは重複チェックを行わないため、パフォーマンス面で有利です。用途に応じて使い分けるとよいでしょう。

  1. PythonのTkinterでファイル選択ダイアログを使い、選択したディレクトリの場所を表示・保存する方法

    ダイアログボックスは、さまざまな種類のアプリケーションでおなじみのUI要素であり、ユーザーとの対話が重要となるアプリケーション開発において非常に役立ちます。ダイアログボックスを利用すれば、ユーザーにファイルの選択を求め、その後、ファイルの読み込みや書き込みといった操作を実行できます。Pythonでは、filedialogモジュールを使用することで、こうしたダイアログボックスを簡単に作成できます。 サンプルコード 以下の例では、ローカルディレクトリからファイルを選択するようユーザーに促し、選択されたファイルの場所(パス)をラベルウィジェットで表示するアプリケーションを作成します。 #Import

  2. PythonのopenpyxlでExcelファイルを読み書きする方法を徹底解説

    はじめにopenpyxlは、Excel 2010形式のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。Office Open XML形式をPythonからネイティブに扱えるライブラリが存在しなかったことから、その不足を補うために誕生しました。業務などで使用するExcelファイルは「ワークブック(Workbook)」と呼ばれ、最低1枚、最大で数十枚のシートを含むことができます。各シートは、行が1から始まり、列がAから始まる構成になっています。openpyxlライブラリを使えば、シートの追加やデータの入力はもちろん、データの操作や削除まで、さまざま