UNION 문은 두 개의 SELECT 쿼리 결과를 하나로 결합하되, 중복된 값은 제거하고 반환하는 SQL 연산자입니다. 두 쿼리가 동일한 행을 반환할 경우, 해당 행은 결과에 한 번만 표시됩니다.
UNION 사용 조건
두 개의 SELECT 문에 UNION을 적용하려면 반드시 다음 조건들을 충족해야 합니다.
- 두 쿼리가 반환하는 열의 개수가 같아야 합니다.
- 열의 데이터 타입이 서로 동일하거나 호환되어야 합니다.
- 두 SELECT 문이 열을 같은 순서로 반환해야 합니다.
기본 구문
SELECT column_name FROM table1 UNION SELECT column_name FROM table2
Python에서 MySQL로 UNION 수행하는 단계
- mysql.connector 모듈을 임포트합니다.
- connect() 메서드를 사용해 데이터베이스와 연결을 설정합니다.
- cursor() 메서드로 커서 객체를 생성합니다.
- 적절한 SQL 문을 이용해 쿼리를 작성합니다.
- execute() 메서드로 SQL 쿼리를 실행합니다.
- fetchall() 메서드로 결과를 가져와 처리합니다.
- 작업이 끝나면 연결을 종료합니다.
예를 들어, 아래와 같은 두 개의 테이블 “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을 사용하면 됩니다.