Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 MySQL UNION 사용하기 – 두 테이블의 조회 결과를 중복 없이 합치는 방법

UNION 문은 두 개의 SELECT 쿼리 결과를 하나로 결합하되, 중복된 값은 제거하고 반환하는 SQL 연산자입니다. 두 쿼리가 동일한 행을 반환할 경우, 해당 행은 결과에 한 번만 표시됩니다.

UNION 사용 조건

두 개의 SELECT 문에 UNION을 적용하려면 반드시 다음 조건들을 충족해야 합니다.

  • 두 쿼리가 반환하는 열의 개수가 같아야 합니다.
  • 열의 데이터 타입이 서로 동일하거나 호환되어야 합니다.
  • 두 SELECT 문이 열을 같은 순서로 반환해야 합니다.

기본 구문

SELECT column_name FROM table1
UNION
SELECT column_name FROM table2

Python에서 MySQL로 UNION 수행하는 단계

  1. mysql.connector 모듈을 임포트합니다.
  2. connect() 메서드를 사용해 데이터베이스와 연결을 설정합니다.
  3. cursor() 메서드로 커서 객체를 생성합니다.
  4. 적절한 SQL 문을 이용해 쿼리를 작성합니다.
  5. execute() 메서드로 SQL 쿼리를 실행합니다.
  6. fetchall() 메서드로 결과를 가져와 처리합니다.
  7. 작업이 끝나면 연결을 종료합니다.

예를 들어, 아래와 같은 두 개의 테이블 “Students”와 “Department”가 있다고 가정해 보겠습니다.

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 목록을 얻을 수 있습니다. 여기서 120과 121은 양쪽 테이블에 모두 존재하지만 한 번만 출력됩니다.

예제 코드

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

위 출력에서 확인할 수 있듯이, UNION은 두 테이블의 Dept_id 값을 모두 포함하면서도 중복된 값(120, 121)은 자동으로 제거하여 반환합니다. 만약 중복 값을 유지하고 싶다면 UNION ALL을 사용하면 됩니다.