231108 TIL #237 SQL #11 UNION

김춘복·2023년 11월 8일
0

TIL : Today I Learned

목록 보기
237/494

Today I Learned

오늘은 sql 강의에서 UNION 파트를 듣고 공부했다.


UNION

2개 이상의 SELECT 문의 결과를 합쳐서 하나의 결과 집합으로 반환하는 데 사용되는 연산자. 여러 테이블을 세로로 합치는 데 사용된다.

사용법

SELECT *
FROM 테이블A
UNION
SELECT *
FROM 테이블B;
  • 위의 쿼리에서 테이블A와 테이블B의 컬럼내용은 같아야 한다.

  • 2개 이상의 테이블을 붙이고 싶으면 계속 UNION을 달아서 붙이면 된다.

  • 붙인 테이블끼리 컬럼명이 다르면 첫 테이블의 컬럼명을 따른다


예시

  • inquiry 테이블

  • inquiry_2019 테이블

  • UNION 쿼리

SELECT *
FROM inquiry
UNION
SELECT *
FROM inquiry_2019;


중복 허락 X

UNION 만 사용하면 중복 레코드를 허락하지 않는다.

  • 첫 테이블에 있는 레코드(3/경기도/40/3)를 두번째 테이블에 넣고 다시 UNION을 출력해본다.

    결과는 새로 레코드를 추가했음에도 그대로다. UNION만 사용할 경우 중복을 허락하지 않기 때문이다.

UNION ALL

UNION 대신 UNION ALL을 사용하면 중복 데이터도 그대로 출력된다.

SELECT *
FROM inquiry
UNION ALL
SELECT *
FROM inquiry_2019;


+ LIMIT 사용

LIMIT을 원하는 테이블에 사용하려면 괄호를 적절하게 사용하면 된다.

  • 괄호 없이 사용
SELECT *
FROM inquiry
UNION
SELECT *
FROM inquiry_2019
LIMIT 1;

통틀어서 1개의 결과만 나온다.

  • 두번째 테이블에서 괄호와 함께 사용
SELECT *
FROM inquiry
UNION
	(
	SELECT *
	FROM inquiry_2019
	LIMIT 1
	);

원하는 대로 두번째 테이블에서만 1개의 결과로 합쳐진다.

  • 양쪽 테이블에서 LIMIT 사용(+ORDER BY)
	(
	SELECT *
	FROM inquiry
    LIMIT 2
    )
UNION
	(
	SELECT *
	FROM inquiry_2019
	LIMIT 2
	)
ORDER BY star;


+ WHERE구

inquiry 테이블과 inquiry_2019 테이블을 합쳐서 star가 4이상인 컬럼만 가져와라

  • 각각의 SELECT문에 WHERE구를 붙여도 가능하다.

  • 하지만 더 깔끔하게 한번에 연산하려면 FROM구에 UNION을 쓰고 서브쿼리로 넣은 다음 메인쿼리에서 WHERE구를 쓰는 것이 좋다.

  • UNION으로 붙인 테이블은 AS로 별명을 붙여야 한다.

SELECT *
FROM
	(
    SELECT *
    FROM inquiry
    UNION
    SELECT *
    FROM inquiry_2019
    ) AS a
WHERE star >= 4;


UNION 이외의 연산자


MySQL 외에 다른 DBMS에서는 UNION 말고도 2개 테이블의 차이를 구하는 EXCEPT(or MINUS)나 2개 테이블의 공통 부분만 덜어내는 INTERSECT 연산자를 쓰기도 한다.

profile
꾸준히 성장하기 위해 매일 log를 남깁니다!

0개의 댓글