제로베이스 데이터 취업 파트타임/100일 챌린지_일일 학습 일지

제로베이스 데이터 파트타임 스쿨 학습 일지 [25.05.27]

김뚱입니다 2025. 5. 27. 17:47

[강의 요약]

[Part 05. SQL_ Ch08. Union] 강의 수강

챕터 8 클립 전체 수강하였음

🐢 100일 챌린지 🔥 : [▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰                                    ] 72/100일 (72%)

바쁘다 너무 바쁘다... 수면이 너무 부족함

 

 

 

[Union]

▶ UNION이란?

UNION은 둘 이상의 SELECT 결과를 하나로 합치는 연산자

예를 들어, 조건이 서로 다른 두 쿼리의 결과를 나란히 보여주고 싶을 때 사용한다.

 

특징은 다음과 같다.

  • 칼럼 수와 순서가 같아야 함
  • 데이터 타입도 호환되어야 함

 

 

▶ 테스트 테이블 만들기

먼저 실습 환경 준비는 저번과 동일하다.

USE zerobase;

 

그 뒤에 테스트 테이블 생성

CREATE TABLE test1 (
    name VARCHAR(20),
    age INT
);

CREATE TABLE test2 (
    name VARCHAR(20),
    age INT
);

 

 

▶ 샘플 데이터 입력

INSERT INTO test1 VALUES ('아이유', 30), ('박보검', 33), ('김태리', 34);
INSERT INTO test2 VALUES ('아이유', 30), ('정해인', 35), ('수지', 32);

 

 

▶ UNION vs UNION ALL

1) UNION ALL : 중복을 포함하여 합치기

SELECT * FROM test1
UNION ALL
SELECT * FROM test2;
  • 결과: 총 6개 (중복 허용)

 

2) UNION : 중복을 제거하고 합치기

SELECT * FROM test1
UNION
SELECT * FROM test2;
  • 결과: 총 5개 (중복 제거됨)

 

 

예제 1: 조건이 다른 SELECT끼리 UNION

ex) 성별이 여성인 연예인 + 소속사가 YG인 연예인

SELECT * FROM celeb
WHERE gender = 'F'

UNION ALL

SELECT * FROM celeb
WHERE agency = 'YG엔터테이먼트';
  • UNION ALL : 중복 포함
  • UNION : 중복 제거

 

 

예제 2: 칼럼 수/타입 맞춰야 하는 이유

-- 잘못된 예시 (칼럼 수 다름)
SELECT name FROM test1
UNION
SELECT name, age FROM test2;
  • 오류 발생 : SELECT 절의 칼럼 수가 다르면 실행되지 않음

 

 

예제 3: 칼럼명 통일이 중요할 때

SELECT name, job FROM celeb
WHERE job LIKE '%가수%'

UNION

SELECT name, birth, age FROM celeb
WHERE birth BETWEEN '1980-01-01' AND '1989-12-31';

이렇게는 불가능함

왜? 칼럼 수, 이름, 데이터 타입을 일치시켜야 하니까.

 

알맞게 수정하면 다음과 같음

SELECT name, job AS info FROM celeb
WHERE job LIKE '%가수%'

UNION

SELECT name, birth AS info FROM celeb
WHERE birth BETWEEN '1980-01-01' AND '1989-12-31';
  • job, birth 모두 AS info로 통일

 

 

▶ 요약(비교)

비교 항목 UNION UNION ALL
중복 제거 O X
성능 느림 빠름
사용 용도 중복이 중요할 때 집계, 전체 병합 등 빠른 처리 필요 시

 

 

▶ 연습 예시

ex 1) 직업이 가수이거나 텔런트인 데이터를 중복 제거하여 합치기

SELECT * FROM celeb
WHERE job LIKE '%가수%'

UNION

SELECT * FROM celeb
WHERE job LIKE '%텔런트%';

 

ex 2) 성이 ‘이’씨이거나 1970년대 출생자 → 중복 포함

SELECT * FROM celeb
WHERE name LIKE '이%'

UNION ALL

SELECT * FROM celeb
WHERE birth BETWEEN '1970-01-01' AND '1979-12-31';

 

 

 

[나의 생각 정리]

UNION / UNION ALL을 사용하여 SQL에서 SELECT 결과를 유연하게 조합할 수 있다.

 

 

[적용점]

결과 조합에 사용

 

 

“이 글은 제로베이스 데이터 스쿨 주 3일반 강의 자료 일부를 발췌하여 작성되었습니다.”