SQL 기초10~11 - 03~06 - UNION _ (Chapter 08. UNION - [Chapter 08-2. UNION])

HA_·2023년 11월 24일
0

Chapter 08-2. UNION

1. UNION

여러 개의 SQL문을 합쳐서 하나의 SQL 문으로 만들어주는 방법

(주의. 칼럼의 개수가 같아야함)

2. UNION 문법

UNION : 중복된 값을 제거하여 알려준다.

UNION ALL : 중복된 값도 모두 보여준다.

SELECT column1, column2, ... FROM tableA
UNION | UNION ALL
SELECT column1, column2, ... FROM tableB;

3. UNION 예제 1 - UNION ALL

test1 의 모든 데이터와 test2 의 모든 데이터를 중복된 값을 포함하여 검색

SELECT * FROM table1
UNION ALL
SELECT * FROM table2;

4. UNION 예제 1 - UNION

test1 의 모든 데이터와 test2 의 모든 데이터를 중복된 값을 제거하여 검색

SELECT * FROM table1
UNION
SELECT * FROM table2;

5. UNION 예제 2 - UNION ALL

성별이 여자인 데이터를 검색하는 쿼리와 소속사가 YG엔터테이먼트인 데이터를 검색하는 쿼리를 UNION ALL 로 실행

예제 실습 전 테이블 확인!

예제 실습 전 테이블 안의 데이터 확인!

1. 성별이 여자인 데이터를 검색하는 쿼리

SELECT name, sex, agency FROM celeb WHERE sex='F'

2. 소속사가 YG엔터테이먼트인 데이터를 검색하는 쿼리

SELECT name, sex, agency FROM celeb WHERE agency='YG엔터테이먼트';

3. 성별이 여자인 데이터를 검색하는 쿼리와 소속사가 YG엔터테이먼트인 데이터를 검색하는 쿼리를 UNION ALL 로 실행

SELECT name, sex, agency FROM celeb WHERE sex='F'
UNION ALL
SELECT name, sex, agency FROM celeb WHERE agency='YG엔터테이먼트';

6. UNION 예제 2 - UNION

성별이 여자인 데이터를 검색하는 쿼리와 소속사가 YG엔터테이먼트인 데이터를 검색하는 쿼리를 UNION 으로 실행

1. 성별이 여자인 데이터를 검색하는 쿼리

SELECT name, sex, agency FROM celeb WHERE sex='F'

2. 소속사가 YG엔터테이먼트인 데이터를 검색하는 쿼리

SELECT name, sex, agency FROM celeb WHERE agency='YG엔터테이먼트';

3. 성별이 여자인 데이터를 검색하는 쿼리와 소속사가 YG엔터테이먼트인 데이터를 검색하는 쿼리를 UNION 으로 실행

SELECT name, sex, agency FROM celeb WHERE sex='F'
UNION
SELECT name, sex, agency FROM celeb WHERE agency='YG엔터테이먼트';

예전 실습 전, 잘못된 칼럼명 변경!

변경 전 칼럼명(brithday)

변경 후 칼럼명(birthday)


7. UNION 예제 3 - 1

가수가 직업인 연예인의 이름, 직업을 검색하는 쿼리와, 1980년대에 태어난 연예인의 이름, 생년월일, 나이를 검색하는 쿼리를 UNION으로 실행
내가 쓴 답)

select name, job_title from celeb where job_title like '%가수%'
union
select name, birthday, age from celeb where birthday between 1980-01-01 and 1989-12-31;


오답!-에러가 나는 건 맞음(따옴표 때문에 틀림)
답)

select name, job_title from celeb where job_title like '%가수%'
union
select name, birthday, age from celeb where birthday between '1980-01-01' and '1989-12-31';
  • 풀이: 생년월일에 따옴표 추가해야 함!
  • 현재 두 구문은 칼럼의 개수가 다르기 때문에 오류가 남!

8. UNION 예제 3 - 2

가수가 직업인 연예인의 이름, 직업을 검색하는 쿼리와,
1980년대에 태어난 연예인의 이름, 생년월일, 나이를 검색하는 쿼리를 UNION으로 실행

SELECT name, job_title
FROM celeb
WHERE job_title LIKE '%가수%';

9. UNION 예제 3 - 3

가수가 직업인 연예인의 이름, 직업을 검색하는 쿼리와, 1980년대에 태어난 연예인의 이름, 생년월일, 나이를 검색하는 쿼리를 UNION으로 실행

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

10. UNION 예제 3 - 4

가수가 직업인 연예인의 이름, 직업을 검색하는 쿼리와,
1980년대에 태어난 연예인의 이름, 생년월일, 나이를 검색하는 쿼리를 UNION으로 실행

SELECT name, job_title FROM celeb WHERE job_title LIKE '%가수%'
UNION
SELECT name, birthday, age FROM celeb
WHERE age BETWEEN '1980-01-01' AND '1989-12-31';

  • 두 구문의 칼럼 개수가 다르기 때문에 에러가 난다!!

혼자서 해봅시다.

문제 1. 직업이 가수인 (가수를 포함하는) 데이터를 검색하는 쿼리와 직업이 텔런트인 (텔런트를 포함하는) 데이터를 검색하는 쿼리를 중복을 제거하여 합쳐서 실행하세요.

내가 쓴 답)

select name, job_title from celeb where job_title like '%가수%'
union
select name, job_title from celeb where job_title like '%텔런트%';


정답!

문제 2. 성이 이씨인 데이터를 검색하는 쿼리와 1970년대생을 검색하는 쿼리를 중복을 포함하여 합쳐서 실행하세요.

내가 쓴 답)

select name, birthday from celeb where name like '이%'
union all
select name, birthday from celeb where birthday between '1970-01-01' and '1979-12-31';


정답!

0개의 댓글