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

Python에서 MySQL로 두 테이블 전체 조인(FULL JOIN) 수행하는 방법

SQL에서는 두 테이블 간의 공통 컬럼 또는 특정 조건을 기준으로 테이블을 조인(Join)할 수 있습니다. SQL은 테이블을 결합하는 여러 가지 유형의 JOIN을 제공합니다.

이 글에서는 두 테이블에 대한 전체 조인(FULL JOIN) 방법을 살펴봅니다. FULL JOIN은 양쪽 테이블의 모든 레코드를 결과에 포함하며, 일치하는 레코드가 없는 경우 해당 자리에는 NULL 값이 채워집니다.

기본 문법

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

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

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     |
+----------+-----------------+

두 테이블 모두에 존재하는 공통 컬럼인 dept_id를 기준으로 전체 조인을 수행해 보겠습니다.

Python에서 MySQL로 전체 조인을 수행하는 단계

  • MySQL 커넥터를 임포트합니다.

  • connect() 메서드를 사용해 데이터베이스 연결을 설정합니다.

  • cursor() 메서드로 커서 객체를 생성합니다.

  • 적절한 MySQL 문법으로 쿼리를 작성합니다.

  • execute() 메서드로 SQL 쿼리를 실행합니다.

  • 작업이 끝나면 연결을 종료합니다.

예제 코드

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')

위 출력 결과에서 볼 수 있듯이, 일부 레코드가 서로 매칭되지 않더라도 두 테이블의 모든 레코드가 결과에 포함됩니다. 매칭되지 않는 레코드의 경우 누락된 부분이 NULL로 표시됩니다.

참고: MySQL은 FULL JOIN을 직접 지원하지 않습니다

MySQL은 표준 SQL의 FULL OUTER JOIN 구문을 기본적으로 지원하지 않습니다. 따라서 위 코드를 그대로 실행하면 구문 오류가 발생할 수 있습니다. MySQL 환경에서 동일한 결과를 얻으려면 LEFT JOIN과 RIGHT JOIN을 UNION으로 결합해 전체 조인을 구현하는 것이 일반적입니다.

query="""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"""

이 방식은 왼쪽 테이블 기준의 결과와 오른쪽 테이블 기준의 결과를 합치면서 중복을 제거하므로, 양쪽 테이블의 모든 레코드를 포함하는 전체 조인과 동일한 결과를 얻을 수 있습니다.